3

字符编码和中文乱码小叙 -- 其他 -- IT技术博客大学习 -- 共学习 共进步!

 1 year ago
source link: https://blogread.cn/it/article/6154?f=hot1
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

字符编码和中文乱码小叙

浏览:5214次  出处信息

记得刚使用ubuntu的时候,处理各种乱码神马的都是很麻烦的事情,后来开始写一些web程序的时候,中文编码的问题还是会不断的出现,于是对于web程序员来说,字符集编码已经是十分常见的问题了,但是如果不去系统的了解下,处理问题时还是会有些棘手的,这篇文章我就打算简单的介绍下这些问题。

最初学习计算机的话,首先接触的便是ASCII编码了,0是48,a是97啥的估计大家都记得很清楚吧,计算机中以8bit为一个byte,于是一个byte能表示256个数,ascii是用一个字节,并且第一位是0,也就是说只用了7个bit,于是ASCII只有128种表示,这对于英文系统是最够的了。但是欧洲很多字母和英文字母很不相同,于是为了扩展,第一位也纳入使用,这样就是ISO8859-1编码,又叫做latin-1,很多时候你不指定编码的时候,默认编码就是ISO8859-1,这是一个要注意的地方。

由于亚洲地区的文字不像欧洲那样用几个字母就可以了,于是亚洲各地区便有了自己的一些编码格式。对于中文编码而言,大家比较熟悉的就是GB2312编码,这是大陆地区推行的简体字的编码标准,而相应的台湾的繁体字用的是BIG5的繁体字编码,由于GB2312只有简体字,后来又进行了扩充,便有了GBK,他是GB2312的超集,就是说GB2312编码的字符,都可以用GBK的方式解读。后来又加入了少数民族的字体有了GB18030,不过这个貌似不如GBK应用广泛。

由于混乱的编码格式,造成了国际化的困难,于是便有了大有一统天下之势的unicode编码,对于各国文字符号等都会在unicode有一个统一的编码,但是unicode只是一种表示方式,但是却没有规定表示符号的这个数字应该如何在计算机上存储。而现在比较通行的存储方式是utf-8,utf-8是一种变长的编码方式。

所以对于中文字符而言,我们最常见的就是GBK和utf-8两种编码格式。对于windows而言用一种叫ANSI的编码格式,他是英文用ASCII编码,简体中文用GB2312编码,而linux等系统一般都会采用utf-8的编码方式,所以当你在linux下打开windows下的一些中文文本文件时会出现乱码的情况,就是因为本来应该是GB2312的编码方式,却用utf-8的格式来解读必然就会出现错误。

当写web程序时也要时刻注意编码的统一,也就是数据库里数据的编码,程序文件的编码,以及网页显示的编码(就是charset字段),以及他们之间的通信的编码方式。比如你是在windows写程序的话,默认的程序编码就是GBK,为了统一,你需要数据库也要改为GBK编码,网页上也要加上这样一句。

  1. <meta http-equiv="content-type" content="text/html; charset=UTF-8" />

还有个需要注意的地方,就是当你使用的数据库是mysql时,默认的字符通信方式是ISO8859-1,你需要加上这样一句,来让通信字符也变为GBK,这样就能在网页上正常显示出汉字了。

  1. mysql_query('set names gbk');

不过一般情况下还是推荐统一的去使用utf-8编码,一个原因是utf-8是一种大势所趋,另一个原因是现在大部分服务器都是linux,所以utf-8会有更好的兼容性。一般写程序时,处理字符的时候先把utf-8转成unicode来进行处理,因为unicode是定长的,所以当你转unicode之后,统计字的个数时也非常方便,然后当需要输出或者存储时在转换成utf-8方式,应该说这样的处理是一种很好的方式。

扩展阅读:
http://blog.jobbole.com/18269/
http://blog.kongxz.com/2010/03/utf8-iso8859-gb-cp936-etc/
http://blog.alphatr.com/about-char-coding.html
http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html
http://blog.csdn.net/garybrother/article/details/3988741

建议继续学习:

QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK