我们经常会遇到文件打开乱码的情况,特别是用C语言操作文件的时候。我用notepad++打开发现是utf8编码的,后来上网查了一下,UTF-8是变长的,一般情况下文件开头有个BOM(Byte Order Mark)作为标识,一般文本编码的BOM:
ANSI:没有BOM,直接是内容。
UNICODE(LE):FF FE
UNICODE(BE):FE FF
UTF-8:EF BB BF
【注】还有一种无BOM的UTF-8编码,这里不考虑。
ANSI采取的是英文字符一个字节,汉字字符两个字节的编码方式,而UNICODE采取使用0-0x10FFFF的数字来映射所有字符,被称为万国码,这里的UNICODE(LE),UNICODE(BE),UTF-8都是UNICODE的子集,其中UNICODE(LE),UNICODE(BE)采用固定两个字节长度的编码,UTF-8采用1到4个字节的变长字节的编码。
LE,BE分别指Little Endian,Big Endian。BIG-ENDIAN就是低位字节排放在内存的高端,高位字节排放在内存的低端。而LITTLE-ENDIAN正好相反。
【举个栗子】现在要编码数字1,我们知道1的4字节编码是0x00000001
采用BE编码,四个字节分别是 0x00,0x00,0x00,0x01
采用LE编码,四个字节分别是 0x01,0x00,0x00,0x00
【注】CPU读取内存从低地址到高地址
这里可以用Python来验证下