您的位置:首页 > 编程语言

编程基础-文字编码-字符集/编码方式/常见乱码错误

2012-04-10 14:33 330 查看
本文由larrylgq编写,转载请注明出处:http://blog.csdn.net/larrylgq/article/details/7444999

作者:吕桂强

邮箱:larry.lv.word@gmail.com

由于计算机只能处理用开关组成的二进制数字,所以当我们要处理文字的时候就要将文字转换成相应的数字,而这些数字就是文字编码

因为世界上语言众多,再加上方言,古代语言,特殊符号等,我们没法同时包括所有的文字所以只能事先规定使用哪些文字,这些实现规定的文字集合就叫字符集

像我们经常用的有ASCII和Unicode,GB2312等

其中Unicode是为了处理所有语言的文字而定义的文字集

字符集中为字符分配编码的是字符编码

eg:UTF-8等

一个字符集可以对应多种编码方式

Unicode字符集:

之前的Unicode字符集使用16位编码方式来实现,但是随着加入的文字越来越多,超过了65535之后之前的编码方式就已经放不下了

现在Unicode使用21位来表示

Unicode的编码方式:

Unicode主要有UTF-8,UTF-16BE/LE(big endian,little endian),UTF-32BE/LE等编码方式

UTF-8:

优点是:可变长的,与Ascii兼容

第一个字节开头有几个连续的1,表示有几个字节

缺点是:

1,占用空间大,几乎所有的汉字都要3个字节

2,正因为是可变长度的,所以随机访问字符串中任意文字的时候需要正序遍历

UTF-16:

从Unicode2字符数超过65530之后就渐渐淘汰

UTF-32:

采用固定的32位的编码方式

缺点是占用内存多

优点是随机访问快

程序中出现乱码的原因:

1,使用错误的编码方式读取

2,没有字体(用于在显示器上展示文字)

3,语言进行内部编码转换时出错

4,使用用户自定义的文字

5,使用的字符集不同(缺少字符)

6,字节顺序错误(eg:UTF-16/32的BE和LE)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  编程 语言