windows下的notepad另存为选项有关于编码的选择,ANSI、Unicode、Unicode big
endian、UTF-8四种选择编码方式。其中ANSI是与你使用的windows操作系统的语言有关系的,向windows 7
简体中文版就是GBK(用一个字节表示英文,用两个字节表示一个中文)。第二个选项Unicode其实是指Unicode16
little endian 。
第四个选项UTF-8大家都知道吧。但是有一个要注意的地方是,微软在windows平台下用自带的notepad.exe生成UTF-8编码的文本文件时会在文件开头加入三个字节的BOM(byte
order mark)EF BB
BF,这样就通过有无BOM区别文本的编码是ANSI(GBK)还是UTF-8。
但是了,UTF-8也可以不要这三个字节的BOM,像用php的GD库生成图片时,如果有了BOM就会出错。而且在windows平台上,用notepad打开一个没有BOM的文本文件,也能正常显示,而不会当做ANSI(GBK)来处理。但是有这样的一个趣事,就是在notepad中输入“联通”两个中文,保存到本地,再打开,会发现乱码。这是为什么呢?
这个就设计到notepad判断文本编码的原理了。(这个原理是根据实验结果推测的,本人不保证其绝对与微软的思路一致)
notepad打开一个文本,有BOM这很容易判断是UTF系列编码,因为UTF-8,UTF-16 big endian, UTF-16 little endian ,UTF-32 big endian, UTF-32 little endian 的BOM都不一样。但是如果文本没有BOM,又不能立刻判定其为ANSI(GBK)编码,因为也有可能是无BOM的UTF-8。所以notepad会根据UTF-8的编码原理推测编码
UCS-4编码
U
但是了,UTF-8也可以不要这三个字节的BOM,像用php的GD库生成图片时,如果有了BOM就会出错。而且在windows平台上,用notepad打开一个没有BOM的文本文件,也能正常显示,而不会当做ANSI(GBK)来处理。但是有这样的一个趣事,就是在notepad中输入“联通”两个中文,保存到本地,再打开,会发现乱码。这是为什么呢?
这个就设计到notepad判断文本编码的原理了。(这个原理是根据实验结果推测的,本人不保证其绝对与微软的思路一致)
notepad打开一个文本,有BOM这很容易判断是UTF系列编码,因为UTF-8,UTF-16 big endian, UTF-16 little endian ,UTF-32 big endian, UTF-32 little endian 的BOM都不一样。但是如果文本没有BOM,又不能立刻判定其为ANSI(GBK)编码,因为也有可能是无BOM的UTF-8。所以notepad会根据UTF-8的编码原理推测编码
UCS-4编码
