
乱码(汉语词语)
乱码,指的是由于本地计算机在用文本编辑器打开源档案时,使用了不相应字元集而造成部分或所有字元无法被阅读的一系列字元。造成其结果的原因是多种多样的。
基本介绍
- 中文名:乱码
- 原因:系统或软体缺乏对某字元编码支持
- 常见问题:GB码和BIG5码冲突
- 分类:文本乱码等四种
简介
种类
汉字乱码现象有4种类型:
乱码

文本乱码:是Windows系统显示乱码,如:选单、桌面、提示框等。这是由于注册表中有关字型部分的设定不当引起的;
文档乱码:是执行档本来显示中文的地方出现乱码。这种乱码形成的原因比较複杂,有第1类的乱码原因,也可能是软体中用到的中文动态程式库被英文动态程式库覆盖所造成的;
档案乱码:主要是指邮件乱码;
网页乱码:是由于港澳的繁体中文大五码(BIG5)与大陆简体中文(GB2312)不通用而造成的。
修正乱码,可以使用系统内码转换工具,如“南极星”等,将系统内码转换为对应内码,字元即可正确显示。
原因
一般是软体程式解码错误。如浏览器把GBK码当成是Big5码显示,或电子邮件程式把对方传来的邮件错误解码。如果在传送时编码错误,收件者的电邮程式是不能解码的,需要寄件者的电邮程式重新编码再寄。字型档案(font file)不对。来源编码错误,或档案受到破坏。
一种语言版本的作业系统安装了另外一种语言版本的应用程式,或者应用程式安装的升级补丁的语言版本与应用程式原来安装的语言版本不一致。
早期单位元组的应用程式在打开双位元组语言的档案时不能正确识别文字的分割,在换行的地方把一个字从中分成两段,导致紧接在后面的整个一行全部都是乱码。
低版本的应用程式不能识别高版本的程式创建的档案。
由于TXD等修改档案出现内部冲突,一些修改游戏的MOD(modification)CLEO、IV补丁、真实补丁、技能补丁、升级补丁和CCI人物补丁等游戏修改软体的“Readme”“必看!”等阅读档案会出现乱码。
电脑软体的错误操作也会导致整个档案出现乱码
资料库原因
数据正确,但资料库配置错误,使用了错误的字元集。一般是资料库移植,还原时DBA的错误造成的。
一般是客户端使用了默认的字元集,比如在GBK的机器上开发,但换到Linux下面就出现读取的数据为乱码了。
解决方法是:在连线参数里面明确指定数据传输用的字元集,而不是使用作业系统默认的。
数据错误。一般是客户端发来的数据编码问题。比如页面传送数据是UTF-8,可是后台处理程式是GBK的,结果造成保存到资料库的数据为乱码。
解决方法:所有字元集编码都採用统一的编码。比如全部用GBK的。
相关资料
避免乱码
1.儘量使用统一的编码,如果你是重头开发一个系统,特别是Java开发的,推荐从页面到资料库再到配置档案都使用UTF-8进行编码,安全第一。
2.SetCharacterEncodingFilter的使用,这个东西不是万能的,但是没有它就会很麻烦,如果是基于Servlet开发的东西,能用的就给它用上,省心。不过有一个注意的地方,这个Filter只是对POST请求有效,GET一律忽略,不信你可以debug一下,看看它怎幺做的,至于为什幺不过滤get请求,好象是它对GET请求是无能为力的。
3.就如上面所说,GET请求有问题,儘量使用POST请求,这个也是Web开发的一个基本要领:
4.JavaScript和Ajax乱码的避免,注意JavaScript默认是ISO8859的编码,避免JS/AJAX乱码和GET一样,不要在URL里面使用中文,实在避免不了,就只能在生成连结的时候转码。
5.儘早统一开发环境,早点模拟真实环境测试,这个好像也有离题的嫌疑,但凡软体开发都是这幺乾的,但仍然值得注意。
应对措施
1.开发环境乱码
由于Java默认使用UTF-8编码,而且网上很多人都建议Struts开发的时候应儘量选用UTF-8做为默认编码,而非GBK。IDE使 用Eclipse,在第一次使用Eclipse的时候应将default text editor改为UTF-8编码。
2.POST请求的过滤
这个是最基本的了,每个Servlet系统基本都会用到这个东西。不过只对POST请求有效,这个挺关键的。使用SetCharacterEncodingFilter,这个很基础的一套过滤器,将所有来自页面的POST请求全部过滤为UTF-8编码。
3. JSP 页面乱码
将JSP页面全部改为charset=UTF-8,这样可以保证与后台互动的时候都是UTF-8编码,一般套用做了以上工作就基本可以应付了。
4.资源档案中汉字转化UTF-8字元问题
国际化问题,在使用资源档案的时候,由于中文在properties档案中无法被程式所识别,需要将其进行转码,我在资源档案下面製作了一个很简单的 bat档案,每次修改资源档案的时候都是在一个临时档案中修改,然后执行这个bat档案,将其转化并保存为所需要的资源档案。
5. GET请求乱码
如果在本项目中採用了get方式提交请求并附加参数,结果导致编码乱码,原因是Tomcat默认请求编码是ISO8859,需要在Tomcat的配置档案 server.xml添加一个参数,URIEncoding=”UTF-8”,这样请求中附属档案的参数就会以UTF-8来进行编码。