在程序中很容易出现中文乱码,主要原因是有太多的编码方式。
有一个很好的网站可以查看汉字的编码:点击打开链接
“中国”两字在不同的编码环境下的值。
首先来看一下常用的编码有哪些,截图自Notepad++。其中ANSI在中国大陆即为GBK(以前是GB2312),最常用的是 GBK 和 UTF8无BOM 编码格式。
后面三个都是有BOM头的文本格式,UCS-2即为人们常说的Unicode编码,又分为大端、小端。
所谓BOM头(Byte Order Mark)就是文本文件中开始的几个并不表示任何字符的字节
UTF8的BOM头为: 0xEF 0xBB 0xBF
Unicode大端模式为: 0xFE 0xFF
Unicode小端模式为: 0xFF 0xFE
BIg5(大五码)是繁体中文,这里我们就不做研究了,“国”字在大五码中无编码,会被英文?替代。
Notepad++ 使用二进制或16进制查看文件:点击打开链接 这个插件也有bug ,在编码选择gb2312时 ,输入中文后在 看其16进制,竟然是utf8 编码中的16进制(可能我是个案)。
我们可以使用binary viewer这个软件查询。点击下载
在ASCII码中1是49 ,A是65;
1、gb2312:
gb2312中 中文和数字只占一个字节,中文占两个字节。
1和A我们很容易识别,D6 D0(16进制)为什么是“中”呢? 上面我们可以看到 “中” 区位码(GB2312)为5448 ,,D6 D0(16进制)和5448不相等呀!
因为5448不是“中”的真实编码,只是区位码。在网上收到GB2312的编码表 ,找到‘中’ 字 。
一般编码方式是:0xA0+区号,0xA0+位号。 因此5448会被翻译成
A0(16进制)+54(十进制)=D6(16进制)
A0(16进制)+48(十进制)=D0(十进制)
5448的真实编码为:D6 D0(16进制)
2.gbk 注:ANS即为gbk
gbk中 中文和数字只占一个字节,中文占两个字节。
3、utf-8 无 bom
utf-8中 中文和数字只占一个字节,中文占三个字节。
3、utf-8 有 bom
有bom开头标志位,是为了告诉打开该文件的程序,请以utf8的方式打开我。
4、Unicode-2大端
unicode 有双字节,四字节等我们使用的是双字节。
unicode 中 英文、数值、中文都占2个字节。
5、Unicode-2小端
大端和小端的区别就是 一个字的两个字节对掉。
计算机字符编码详解二