为什么bom头会产生乱码?
有bom头的存储或者字节流,它一定是unicode字符集编码。到底属于那一种(utf-8还是utf-16或是utf-32),通过头可以判断出来。由于已经说过utf-16,utf-32不指定bom头,解析程序默认就认为是ansi编码,出现乱码。 而utf-8指定或者不指定程序都可判断知道对于的字符集编码。问题就出在这里,可能有的应用程序(ie6浏览器),它就认为如果utf-8编码,就不需要指定bom头,它可以自己判断,相反指定了bom头,它还会出现问题(因为它把头当utf-8解析出现乱码了)。这里不截图了,cnblogs里面谈这个比较多,目前ie6会出现问题。其它ie7+,firefox,chrome不会出现,会忽略掉bom头。 统一解决办法是:存为utf-8编码是,不需要加入bom头,其它utf-16,utf-32加入。
通过程序运算gb2312编码能够自动转换为utf-8编码吗?
utf-8实际是unicode字符集表现方式。如果看了这2种字符集编码表就清楚了。 它是2个独立字符集,相同汉字在2个字符集中所对应编号没有关系,而且汉字顺序也不同,gb2312先按照拼音后按照笔画排序,而unicode没有做相应规定。我们清楚知道,如果没有对应字符集映射关系表在手。通过直接程序进行运算是实现不了的。如果你手里有这2个字符集映射表。如:”字”utf-8是:0xE6, 0xB1, 0x89 ,对应unicode编码是:23383,然后拿23383,在unicode字符集寻找,发现是字符“字”,接着将“字”这个字符,拿到gb2312表中查询:0xCE,0xC4 因此转换结果是:0xE6,0xB1,0x89 ---> 0xCE,0xC4。
GB2312、GBK、gb18030、Big5是什么关系?
GB2312:1980年的GB2312一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。
GBK: 汉字国标扩展码,基本上采用了原来GB2312-80所有的汉字及码位,并涵盖了原Unicode中所有的汉字20902,总共收录了883个符号, 21003个汉字及提供了1894个造字码位。包括港、台两种汉字字库.
GB18030-2000产生,在GBK汉字标准字符集继续扩展,GB18030是GBK的超集,也就是包含的字符要比GBK多,又增加了6351个字符,其中一部分为4字节字(four-byte encoding range)。增加了六种少数民族语言和一些四字节字。
Big5是中国台湾的,是繁体中文代表
GB18030兼容GBK兼容GB2312 ,相同常用汉字在GB2312编码表中字符编号(编码)与GBK,GB18030相同。如:”字“gb2312字符编码是:0xCE,0xC4 ,它在其它2个里面也是这个。因为GB2312只有7000多常用汉字,当出现繁体,古文时候就会出现问题,因此采用大集合的GB18030是个不错选择。
Big5与GB2312不能通过程序相互转换,需要有字符集映射关系表才能完成。
本文导航
- 第1页: 首页
- 第2页: 什么是字符编码?
- 第3页: 常见问题字符疑问收集
- 第4页: 为什么bom头会产生乱码?
- 第5页: 字符集是怎么样一个演变过程呢?
- 第6页: CJK字符集是什么?