字符编码学习笔记

unicode: 也叫万国码,是计算机领域的一种业界标准,它是基于通用字符集的.Unicode的功用是为每一个字符提供一个唯一的代码(即一组数字),而不是一种字形,而将视觉上的演绎工作(例如字体大小、外观形状、字体形态、文体等)留给其他软件来处理,例如网页浏览器或是文字处理器。

            目前实际应用的Unicode版本对应于UCS-2,使用16位的编码空间。也就是每个字符占用2个字节。这样理论上一共最多可以表示216即65536个字符。基本满足各种语言的使用。实际上目前版本的Unicode尚未填充满这16位编码,保留了大量空间作为特殊使用或将来扩展。

    最新(但未实际广泛使用)的Unicode版本定义了16个辅助平面,两者合起来至少需要占据21位的编码空间,比3字节略少。但事实上辅助平面字符仍然占用4字节编码空间,与UCS-4保持一致。未来版本会扩充到ISO 10646-1实现级别3,即涵盖UCS-4的所有字符。UCS-4是一个更大的尚未填充完全的31位字符集,加上恒为0的首位,共需占据32位,即4字节。理论上最多能表示231个字符,完全可以涵盖一切语言所用的符号。

    Unicode的实现方式称为Unicode转换格式(Unicode Translation Format,简称为UTF)

    UTF-8编码,这是一种变长编码,它将基本7位ASCII字符仍用7位编码表示,占用一个字节(首位补0)。而遇到与其他Unicode字符混合的情况,将按一定算法转换,每个字符使用1-3个字节编码,并利用首位为0或1进行识别。这样对以7位ASCII字符为主的西文文档就大大节省了编码长度(具体方案参见UTF-8)。类似的,对未来会出现的需要4个字节的辅助平面字符和其他UCS-4扩充字符,2字节编码的UTF-16也需要通过一定的算法进行转换。

    直接使用与Unicode编码一致(仅限于BMP字符)的UTF-16编码,由于每个字符占用了两个字节,在Macintosh (Mac)机和PC机上,对字节顺序的理解是不一致的。这时同一字节流可能会被解释为不同内容,如某字符为十六进制编码4E59,按两个字节拆分为4E和59,在Mac上读取时是从低字节开始,那么在Mac OS会认为此4E59编码为594E,找到的字符为“奎”,而在Windows上从高字节开始读取,则编码为U+4E59的字符为“乙”。就是说在 Windows下以UTF-16编码保存一个字符“乙”,在Mac OS里打开会显示成“奎”。此类情况说明UTF-16的编码顺序若不加以人为定义就可能发生混淆,于是在UTF-16编码实现方式中使用了大端序(Big-Endian, 简写为UTF-16 BE)、小端序(Little-Endian,简写为UTF-16 LE)的概念,以及可附加的字节顺序记号解决方案,目前在PC机上的Windows系统和Linux系统对于UTF-16编码默认使用UTF-16 LE。(具体方案参见UTF-16)

    XML及其子集XHTML采用UTF-8作为标准字集,理论上我们可以在各种支持XML标准的浏览器上显示任何地区文字的网页,只要电脑本身安装有合适的字体即可。可以利用&#nnn;的格式显示特定的字符。nnn代表该字符的十进制Unicode代码。如果采用十六进制代码,在编码之前加上x字符即可。但部分旧版本的浏览器可能无法识别十六进制代码。

总结:unicode,ISO 10646通用字符集都只是一种编码标准,即为世界上可能出现的字符设置一个唯一的编码值,具体字符该怎么显示并没有定义,如何显示一个unicode(iso 10646)字符是由显示字体决定的。

gb2312 : 由2个字节组成,并且2个字节的值得都得大于127
gbk : 由2个字节组成,只要第一个字节大于127,则该字节与其后的一个字节组合起来表示一个中文字符
GB18030 : 表示与gbk一样只是字符集更大,增加了几千个少数民族文字
在gbk或gb判断一个字符是否是汉字的方法是判断一个字节的值是否大于127,如果大于则该字节与其后的一个字节合起来表示一个中文

utf-8是一种unicode的一种实现,在utf-8判断是否是汉字需要查询unicode编码表一种不全的范围是U+4E00~U+9FA5

html中我们可以用&#10进制数字或&#x16进制数字 表示一个unicode字符
java中可以用\u四个十六进制数表示一个unicode字符
js 中也是用\u四个十六进制数表示一个unicode字符

你可能感兴趣的:(windows,算法,linux,浏览器,OS)