关于汉字编码
大致信息
GB2312一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字范围是0xB0A1-0xF7FE,其中有5个空位是D7FA-D7FE。
GBK收录了21886个符号,包括21003个汉字和883个其它符号。汉字范围是0x8140-0xFEFE。
未安装大字符集时,Windows下Unicode的汉字范围是U+4E00-U+9FA5和U+F900-U+FA2D。
宋体大字符集 http://okuc.net/SoftWare/UniFonts6.0.exe
GB2312是1980年的国家标准,GBK是1995年的行业规范。
Unicode是编码方法,UTF-8 UTF-16LE UTF-16BE等为实现方式。
具体信息
Unicode、GB2312、GBK和GB18030中的汉字
http://blog.csdn.net/fmddlmyy/archive/2007/11/05/1868313.aspx
浅谈文字编码和Unicode(上)
http://blog.csdn.net/fmddlmyy/archive/2007/02/14/1510189.aspx
浅谈文字编码和Unicode(下)
http://blog.csdn.net/fmddlmyy/archive/2007/02/14/1510193.aspx
http://www.fmddlmyy.cn
------------------分割线------------------
在中英文混写的字符串里,怎样区分多字节字符(如:中文字符)呢?
如果是ISO 8859 系列的单字节编码(SBCS),所有字符都是1字节代表1字符。
如果是UTF-16LE/UTF-16BE 的双字节编码(DBCS),所有字符都是2字节代表1字符。
如果是GBK编码(多字节编码MBCS,1-2字节),单字节字符的范围是0x00-0x80,双字节字符首字节的范围是0x81-0xFE。我们顺序读取字节数据,如果读到的字节在0x81到0xFE内,那么这个字节就是双字节字符的首字节。GBK定义双字节字符的尾字节范围是0x40到0x7E和0x80到0xFE(可用来验证是否有非法字符)。
如果是UTF-8编码(多字节编码MBCS,1-4字节)
因为
{
UTF-8的编码规则很简单,只有二条:
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。
}
所以
{
取第一个字节判断最高位是否为0(和0x80作与运算),不是0的话,左移判断有n个二进制位是1,那么这个字符就是n字节编码。
}