字符编码和中文乱码
来源:互联网 发布:苹果手机端口号 编辑:程序博客网 时间:2024/05/18 00:56
记得刚使用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编码,网页上也要加上这样一句。
- <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
还有个需要注意的地方,就是当你使用的数据库是mysql时,默认的字符通信方式是ISO8859-1,你需要加上这样一句,来让通信字符也变为GBK,这样就能在网页上正常显示出汉字了。
- mysql_query('set names gbk');
不过一般情况下还是推荐统一的去使用utf-8编码,一个原因是utf-8是一种大势所趋,另一个原因是现在大部分服务器都是linux,所以utf-8会有更好的兼容性。一般写程序时,处理字符的时候先把utf-8转成unicode来进行处理,因为unicode是定长的,所以当你转unicode之后,统计字的个数时也非常方便,然后当需要输出或者存储时在转换成utf-8方式,应该说这样的处理是一种很好的方式。
转自:http://www.isnowfy.com/introduction-to-char-coding/
- 字符编码和中文乱码
- 字符编码和中文乱码小叙
- Python字符编码 中文乱码
- mysql中文字符编码乱码解决方案
- 字符编码-理解跨平台中文乱码
- java中文字符乱码编码转换大全
- linux中文乱码CRT字符编码设置
- response字符编码解决中文乱码
- javaweb中文字符编码乱码问题
- java中文字符乱码编码转换大全
- java中文字符乱码编码转换大全
- 中文字符编码和通用编码
- CentOS中文乱码修改字符编码使用支持中文
- 解决全站字符乱码(POST和GET中文编码问题)
- java web url编码与解码--中文乱码和特殊字符转义问题
- java 解决全站字符乱码(POST和GET中文编码问题)
- 解决全站字符乱码(POST和GET中文编码问题)
- 字符,字节和编码(乱码的产生)
- opncv2.4.3 SIFT编译出错
- QWidget,QMainWindow和QDialog的区别 .
- 解决linux停在starting automount无法启动
- ecos kernel 分析
- 设置Flex在加载应用的时候获取焦点
- 字符编码和中文乱码
- centos下phpmyadmin的安装配置
- 3520a mmz错误解决方法
- eCos学习笔记之启动代码分析
- Linux系统下安装phpmyadmin方法
- linux 与arm下 log4cplus 安装配置,qtcreator 开发环境
- iOS系统GCD学习(3):dispatch_group
- 【Boost】boost库的随机数的例子
- 句柄和指针的区别