签名、BOM头、编码、Windows记事本编码、java编码解码的那些事

			对于Windows记事本:
			ANSI				:GB2312				java中应使用GBK解码
			Unicode				:有签名的UTF-16LE	java中应使用UTF-16解码
			Unicode big endian	:有签名的UTF-16BE	java中应使用UTF-16解码
			UTF-8				:有签名的UTF-8		java中只能手动去掉签名了再用UTF-8解码了
			
			对于java程序的解码:
			GBK		:GBK编码可以兼容GB2312,因此用GBK处理GBK、GB2312两种编码
			UTF-8	:无签名的UTF-8
			UTF-16	:有签名的UTF-16LE或UTF-16BE,两者根据签名自动识别
			UTF-16BE:无签名的UTF-16BE
			UTF-16LE:无签名的UTF-16LE
			
			UNICODE其实只是字符集而不是编码,Windows的记事本用Unicode来代表有签名的UTF-16LE有些
			不恰当,记事本里面的ANSI在不同系统会映射成不同编码,在中文系统是GB2312编码,在英文系
			统是ASCII编码
			
			签名又叫BOM,即字节顺序标记,它是插入到以UTF-8、UTF16或UTF-32编码Unicode文件开头的
			特殊标记,用来识别Unicode文件的编码类型。对于UTF-8来说,BOM并不是必须的,因为BOM用来
			标记多字节编码文件的编码类型和字节顺序(big-endian或little- endian)。
			BOMs 文件头:

			00 00 FE FF    = UTF-32, big-endian

			FF FE 00 00    = UTF-32, little-endian

			EF BB BF       = UTF-8,

			FE FF          = UTF-16, big-endian

			FF FE          = UTF-16, little-endian

  

原文地址:https://www.cnblogs.com/xxNote/p/5416138.html