偶尔也会遇到乱码,时而也会有人问到乱码问题,出于温习和除草的目的,整理一下。刚开始碰到乱码问题可能会不知所措,但在了解可能出现乱码的几个点之后,便可以轻松地避免或者解决。
这里说的乱码问题总体分为两类:
一、页面出现乱码;
二、从数据库取值或插入时出现乱码;
避免出现乱码的最好的办法,就是在所有指定编码的地方指定相同的编码。推荐釆用utf-8进行统一编码。下面分别描述及解释下上面三种出现乱码的情况。
第一种情况,不涉及数据库操作,或者我们假设数据库的操作不会造成乱码(数据库造成乱码的情况在下面讨论)。那么只需要检查脚本文件的编码和页面编码是否一致即可。文件的编码一般的文本编辑器都可以更改,如Eclipse,notepad2,Netbeans等,而网页页面的编码则通过meta标签来指定。
第二种情况,则需要数据库编码、数据库表中该字段的编码及页面编码保持一致。数据库编码及字段编码可以在创建时设置collation来指定。页面编码上面已经提到。
有的时候,我们在进行数据库操作时,插入的是什么字符,读取出来的时候还是那些字符,好像没有什么问题。但是当我们对数据库进行管理的时候,在第三方工具里显示的却是乱码。这就是由于连接数据库时的编码和数据库的编码或者页面编码不一致造成的。我们可以在数据库连接建立后通过sql 语句来指定编码:SET NAMES UTF8,注意没有连字符。
总结:这里推荐的方式是将所有的编码指定为utf-8。
脚本文件编码:utf-8
网页页面编码:
数据库及字段编码:utf8_general_ci
数据库连接编码:SET NAMES UTF8;
题外话:为何推荐采用UTF8编码?唯一记得的就是它是国际通用的语言编码,兼容性比较好,故用之。下面摘取一段专业的说明:
使用UTF-8编码唯一的好处是,国外的用户如果使用Windows XP英文版,浏览UTF-8编码的任何网页,无论是中文、还是日文、韩文、阿拉伯文,都可以正常显示,UTF-8是世界通用的语言编码,UTF-8的推广要归功于Google的应用,以及Blog开发者。而如果用Windows XP英文版的IE6.0浏览gb2312语言编码的网页,则会提示是否安装语言包。因此,可能会失去很多的国外浏览者。
使用gb2312编码的好处是,因为程序产生的网页文本使用ANSI编码格式,会比UTF-8文本编码节省一些体积,访问速度会稍微快一点点,体积比请见我这里做的精确的实验。
我们来看看日本语的Blog,使用Japanese (EUC)编码、UTF-8编码都占多数;韩国语的Blog,UTF-8编码占多数,Korean (EUC)、Korean也同样占较大部分。
由此可以得出,使用UTF-8语言编码,还是使用本国的语言编码,与是否爱国没有多大关系,或者说,压根儿就没有关系,在中国,没有一个人是不爱国的。我一直在UTF-8和gb2312之间徘徊,要不要使用UTF-8编码?千万次地问。