常见问题字符疑问收集
什么是ANSI字符集?
这个不是固定字符集,如果在中文简体windows中,它代码字符集是gb2312,在繁体值代表是big5等等。
为什么英文字符不会出现乱码?
常见ascii码字符集是:128字符,对应编码值是:1-128 ,二进制表示是:00000001-01111111。它表示了所有常见英文数字,标点符号。其它字符集都是由ascii码字符集扩展而来,扩展了最高位由10000000开始,用多字节表示新的字符,基本都保留了:0xxxxxxx 开头128个基本字符,而且对应编码与ascii码相同。
这样,常见英文字符不论在那种字符集中,对应字符编码一致,存储编码也一样。读取时候无论用什么字符集读取,它所对应字符也一直。所有基本不会出现乱码情况。
读取软件能够识别存储文件的字符集吗?
由于目前各种字符集加起来有上百种,目前除了unicode字符集,定义的存储文件头,基本其它字符集只是给出了对应的字符编号值。因此,相同编号会出现在不同的字符集中,光从文件存储的编码值,是不能确定它的字符集的。如:gb2312字符集中,D6d0对应是“中”,而同样是:D6D0在ecu-jp 字符集中,对应是“面”
什么是bom头?
bom全称是:byte order mark,汉语意思是标记字节顺序码。只是出现在:unicode字符集中,只有unicode字符集,存储时候,要求指定编码,如果不指定,windows还会用默认的:ANSI读取。常见的bom头是:
UTF-8 ║ EF BB BF UTF-16LE ║ FF FE (小尾) UTF-16BE ║ FE FF (大尾) UTF-32LE ║ FF FE 00 00 UTF-32BE ║ 00 00 FE FF
unicode与utf-8 、utf-16 utf-32是什么关系?
unicode(统一码、万国码、单一码)是一种字符集,Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。Unicode用数字0-0x10FFFF来映射这些字符,最多可以容纳1114112个字符,或者说有1114112个码位。UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案。在Unicode中:汉字“字”对应的数字是23383。我们可以用:UTF-8、UTF-16、UTF-32表示这个数字,将数字23383存储在计算机中。UTF-8对应是:0xE6, 0xB1, 0x89(3个字节),UTF-16对应是:0x6c49(2个字节),UTF-32对应是:0x6c49(4个字节)。utf-8,utf-16,utf-32是unicode码一种实现形式,都是属于unicode编码。
unicode编码特点是什么?
unicode编码特点是,它定义了编码方式和存储实现方式。编码方式就是上面说的可以用,utf-8…utf-32表示,而存储实现方式,无论那种编码都知道了文件头(bom)。因此,可以通过这个特殊头来判断存储的文本文件使用那种字符集编码。 为什么utf-8编码不指定bom头(可以理解为文件头),软件任然可以正常判断出它字符集编码?这个问题估计很多朋友都会产生疑问,为什么utf-16不指定就读乱码,而utf-8可以。我们可以从下面的例子看下: utf-8是怎么样从unicode转换而来了。 Unicode编码(16进制) ║ UTF-8 字节流(二进制) 000000 - 00007F ║ 0xxxxxxx 000080 - 0007FF ║ 110xxxxx 10xxxxxx 000800 - 00FFFF ║ 1110xxxx 10xxxxxx 10xxxxxx 010000 - 10FFFF ║ 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 从上面看,发现规律没有?第一个自己开头有几个”1”,后面就对应有几个10开头字节了。 这样我们都可以通过正则进行检测了. [\x09\x0A\x0D\x20-\x7E] # ASCII
|[\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
|\xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
|\xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
|\xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
|[\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
|\xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
由于它独特的编码存储特点,因此目前常见文本处理软件就能够自动分析出来。(windows记事本,editplus,notepad++等)
本文导航
- 第1页: 首页
- 第2页: 什么是字符编码?
- 第3页: 常见问题字符疑问收集
- 第4页: 为什么bom头会产生乱码?
- 第5页: 字符集是怎么样一个演变过程呢?
- 第6页: CJK字符集是什么?