这几天从设备中导出一个文件,默认的编码格式是ANSI,但要求是UTF-8编码格式。因为对编码的概念不清楚,查了好多资料后总结如下。其中对引文进行注释,如有侵犯作者权利,请告知,我会尽快处理。
-
BOM [1]
文本的编码涉及到一个BOM(Byte Order Mark) 的概念,简单的讲,在Unicode标准中,为了标示文本文件的编码类型,可以在文本文件的开始插入几个特殊的byte,通过这几个特殊的byte应用程序就可以鉴别文本文件使用的是那种编码了。这几个特殊的byte也被称之为BOM。对于Unicode,几种编码的BOM如下:
UTF-32, big-endian 文件的前4个byte是:00 00 FE FF
UTF-32, little-endian文件的前4个byte是:FF FE 00 00
UTF-16, big-endian文件的前2个byte是:FE FF
UTF-16, little-endian文件的前2个byte是:FF FE
UTF-8文件的前3个byte是:EF BB BF
UTF-7的规律特殊一点,不是前几个byte,而是所有的byte转换为十进制都小于127. -
字符集 [2]
字符集就是一类字符,图形,标点符号的集合。简单理解就是所有英文用的字母,字符,标点符号就是一个字符集。同理,中文有中文的字符集,日语有日语的字符集等等。 -
编码集
Unicode和ANSI都是字符的编码集,不是特定的字符编码!ANSI包括: ASCII, GB2312, GBK(繁体字符), GB13080(少数名族字符), BIG-5(台湾), JIS(日文)等编码;
Unicode包括:UTF-8, UTF-16, UTF-32等编码。 -
编码示例
记事本新建文本文件1.txt,其中输入字符“厂”保存,注意此时的编码格式为ANSI ;
该文本另存为2.txt,编码格式选为Unicode;
该文本另存为3.txt,编码格式选为UTF-8;
可以清晰的看到:
1.txt保存时选择的编码是ANSI,其编码格式为GBK(中文操作系统);
2.txt保存时选择的编码是Unicode,其编码格式为UTF-16(LE),这个编码也是该“厂”字的码 点,所以有文章提到Unicode可以看成UTF-16;
3.txt保存时选择的编码是UTF-8,其编码格式为UTF-8。
引文如下:
[1] https://www.iteye.com/blog/jxyang-1708949
[2] https://blog.csdn.net/mdcire/article/details/79169407: ASCII,ANSI,UNICODE编码的一些知识