乱码形成原因及其消除方法大全

转载 2007年10月13日 10:27:00

当我们浏览网页、打开文档或邮件,运行软件时,经常会看到乱码,通常是由于源文件编码,Windows不能正确识别造成的的,也可能是其他原因。乱码给我们带来了太多的烦恼,为了帮助大家彻底摆脱乱码,下面我们就来探讨一下乱码的形成原因及其消除方法。

  一、乱码有五种类型

  常见的乱码,一般可以分成五种类型:第一类是文本/文档文件乱码,这一般是由于源文件编码,与Windows使用的编码不通用造成的;第二类是网页乱码,形成原因与第一类乱码类似;第三类是Windows系统界面乱码,即中文Windows的菜单、桌面、提示框等显示乱码,主要是Windows注册表中有关字体的部分设置不当引起的;第四类是应用程序的界面乱码,即各种应用程序(包括游戏)本来显示中文的地方出现乱码,形成原因比较复杂,有第二类的乱码原因,也可能是软件用到的中文链接库,被英文链接库覆盖造成的;第五类是邮件乱码,形成原因也极其复杂。

  二、如何消除应用程序的界面乱码?

  目前有些软件发行了Unicode版本,这是一种通用的字符编码标准,涵盖了全球多种语言及古文和专业符号,这种版本的软件运行在任何系统和语言上都不会乱码,如果是非Unicode编码的程序,就会有乱码现象。

  【形成原因】:原因有三种。如果是由于Windows注册表中关于字体设置的信息不正确造成的,你可以用下面如何消除Windows系统界面乱码介绍的办法去解决;如果用上法解决不了,那就可能是由于软件的中文链接库,被英文链接库覆盖而引起的。这种现象经常发生在用微软开发工具例如VBVC开发的中文软件上,这类软件中,菜单等显示界面上的汉字都是受一个动态链接库(DLL文件)控制,而软件的这个动态链接库一般安装在Windows/System目录下,如果以后安装了某个英文软件也使用同名的动态链接库,则英文软件的动态链接库就会覆盖中文链接库,这样,运行中文软件时就会调用英文的动态链接库,因此出现乱码。解决办法:重新安装中文软件,恢复中文动态链接库即可。

  如果以上方法也无济于事,对于Win9XME系统,你可以安装使用MagicWin98(下载地址http://www.skycn.com/soft/3047.html)、南极星等内码转换软件,转换内码后即可消除乱码;对于WinXP系统,建议使用微软多语言支持工具MicrosoftAppLocale(下载地址http://www.skycn.com/soft/12582.html),利用它为指定程序设置相应的语言区域,这样也可消除乱码。

  三、如何消除文本/文档文件乱码?

  【形成原因】:一般是由于文档采用的字符集,系统不支持造成的。例如繁体中文的文档显示在简体中文系统下,或者相反的情况,就会造成文档显示时乱码。只要你内码转换正确,例如把原本是繁体的内码,转换为简体内码(或者相反),即可消除乱码。

  【解决办法】:有以下四种解决办法:

  1、使用Word2003/XP转换内码

  Word2003/XP支持众多的语言,可以正确显示非Unicode类型的文本文件,单击工具菜单下的语言”/设置语言,你可以把默认语言设置成非中文,例如日语,这样Word就可以正确显示日文了。

  当然你也可以用它进行简体中文与繁体中文之间的转换工作,如果文件有乱码,你转换一下即可消除。例如要把繁体中文转换为简体中文,方法是:选择要转换内码的文件,在弹出的对话框中,选择其他编码中的繁体中文(BIG5一项,打开此文件时就不会出现乱码。

    2
、使用Word2003/XP无乱码保存

  在Word2003/XP中,当保存时选择文件中的另存为,先存为“WORD”文档,存盘后打开再存为纯文本等其他格式;或者在菜单栏中选择工具/语言/中文简繁转换,内码转换以后再保存。

  3、使用内码转换工具

  除此之外,使用内码转换工具也可以消除此类乱码,你只要对BIG5(繁体中文)和GB2312(国标码、简体中文)进行相互转换即可实现。

  4、使用WPS2000转换内码

  WPS2000也能转换内码,支持GB2312BIG5GBK等三种主要的汉字编码,并可在输出RTFTXTHTM格式文件时对内码进行转换。

   
四、如何消除网页乱码?

  【形成原因】:网页乱码是浏览器(IE等)对HTML网页解释时形成的,如果网页制作时编码为A,浏览器却以编码B显示该网页,就会出现乱码,因此只要你在浏览器中也以编码A显示该网页,就会消除乱码。

  例如网页的代码中有形如:〈HTML〉〈HEAD〉〈META CONTENT=“text/htmlcharset=ISO-8859-1”〉〈/HEAD〉的语句,浏览器在显示此页时,就会出现乱码,因为浏览器会将此页语种辨认为欧洲语系

  【解决办法】:有以下四种解决办法:

  1、在浏览器中选择编码菜单

  事先为浏览器安装多语言支持包(例如在安装IE时要安装多语言支持包),这样当浏览网页出现乱码时,即可手工更改此类网页的编码方式,在浏览器中选择菜单栏下的查看”/“编码”/“自动选择”/简体中文(GB2312),如为繁体中文则选择查看”/“编码”/“自动选择”/繁体中文(BIG5),其他语言依此类推,选择相应的语系,这样便可消除网页乱码现象。

  2、修改网页代码

  用FrontPage等软件打开出现乱码的网页,修改该网页代码,在以下句子中

  〈META CONTENT=“text/htmlcharset=ISO-8859-1”〉,将语种“ISO-8859-1”改为GB2312,如果是繁体网页则改为BIG5

  3、无乱码保存网页

  用浏览器打开该网页,在查看”/“编码中选择自动选择,存盘时保存类型选“WEB,编码选择“UNICODE”,这样保存过的网页再次打开时,在浏览器菜单查看”/“编码中不管选择简体中文(GB2312)、简体中文(HZ)还是UNICODEUTF-8)或繁体中文(BIG5),最终显示都不会出现乱码。

  4、使用多内码显示软件

  使用多内码显示软件来转换内码,也可以消除乱码。
  
   
五、如何消除Windows系统界面乱码?

  【形成原因】:这类乱码是由于Windows注册表中关于字体部分配置不正常造成的,即使您用内码翻译软件(如南极星、MagicWin98等)处理也不会消除。

  【解决办法】:在Windows注册表中,恢复关于字体部分的正确设置。

  1、利用显示正常的电脑

  假如有一台Windows版本相同、显示正常的电脑可以利用,你可以如下步骤进行恢复:在正常机器上选择开始”/“运行,在对话框中键入“REGEDIT”,打开注册表编辑器;光标定位到“HKEY_LOCAL_MACHINE/SYSTEM/CURRENT CONTROL SET/CONTROL/FONTASSOC”,选择注册表/导出注册表文件,选择分支,导出该分支注册表信息到文件(如LI.REG)中;把LI.REG文件COPY到显示乱码的机器上,在显示乱码机器上运行REGEDIT,选择注册注册表”/“导入注册注册表,把LI.REG文件导入注册表中。

  2、在显示乱码的电脑上操作

  如果没有显示正常的电脑可以利用,就需要您手工恢复字体部分注册表项,方法有以下两种:

  第一种方法:用记事本编辑一个文件,然后保存为扩展名“REG”(文件名随意),再用鼠标右键单击这个文件,在右键菜单中选择合并,即可完成对注册表的改动。该文本文件的内容如下:

   REGEDIT4

   [HKEY_LOCAL_MACHINE/System/CurtentControlset/control/fontassoc]

   [HKEY_LOCAL_MACHINE/System/CurtentControlset/control/fontassoc/Associated DefaultFonts]

   "assocSystemFont"="simsun.ttf"

   "FontPackageDontCare"="宋体"

   "FontPackageRoman"="宋体"

   "FontPackageSwiss"="宋体"

   "FontPackageModem"="宋体"

   "FontPackageScript"="宋体"

   "FontPackageDecorative"="宋体"

   [HKEY_LOCAL_MACHINE/System/CurtentControlset/control/fontassoc/Associated CharSet]
   "ANSI(00)"="yes"

   "SYMBOL(02)"="no"

   "OEM(FF)"="yes"

   "GB2312(86)"="yes"  

   
第二种方法:在出现乱码的电脑上,单击菜单开始”/运行,键入REGEDIT打开注册表;找到“HKEY_LOCAL_MACHINE/SYSTEM/CURRENT CONTROL SET/CONTROL/FONTASSOC”,正常情况下会有ASSOCIATED DEFAULTFONTSASSOCIATED CHARSET两个文件夹.

  当出现汉字乱码时,上述两个文件夹中内容就会不完整,有的没有ASSOCIATED CHARSET文件夹、或其中内容残缺不全;有的ASSOCIATED DEFAULTFONTS下内容残缺。只要你打开注册表,在“HKEY_LOCAL_MACHINE/SYSTEM/CURRENTCONTROLSET/CONTROL/FONTASSOC”下,根据以上正确内容恢复即可。

  六、如何消除邮件乱码?

  邮件乱码的形成原因很多,主要有以下几个方面,针对以下几种形成原因,应该采取不同的乱码消除方法:

  1、收发信双方的语种不同导致的

  收发双方使用的操作系统的不同,可以造成乱码。比如发件人使用的是日文的Windows,而收件人使用的是简体中文的Windows,这样的邮件当然会造成乱码。对于中文电子邮件,如果收信方所用的操作系统是英文环境、而且没有外挂中文系统或未切换为中文(如南极星等)编码方式,也会无法看到中文、只可见乱码。所有的双字节字符(如中文简/繁体的GBBIG5及日文的JISEUC和朝鲜文的 KSC码等)在非本语种操作系统下都会出现乱码;同样在中文简体的GB码环境下,看其他双字节字符时也只能看到乱码。

  【解决办法】:安装多语言支持包或使用多内码显示平台(如南极星等),对收到的邮件,根据其使用的语种切换到相应的编码方式即可消除乱码。

  2、发信服务器不支持8位(非ASCII码格式)传输

  邮件传输机制或邮件编码的不同,可能造成邮件服务器不支持8位(非ASCII码格式)传输而形成邮件乱码。例如直接发送中文或二进制等非ASCII码格式的邮件(如中文双字节文件、图片文件.jpg、可执行文件.exe或压缩文件.zip等二进制文件)时,邮件服务器有可能无法处理,便把信件中每个字符的第八位都过滤掉,从而造成邮件信息的失真或损坏,在收到邮件时就是一堆乱码。

  【解决办法】:只能由发件人解决。当发送8位格式的文本文件时,必须事先进行编码,将文件转换为7ASCII码或更少位数的格式,然后才能保证文件的正确传送。收件人收到7位或更少位格式的邮件后,可以再转换为8位的格式,这样就可避免乱码。

  3、收发端用的EMAIL软件和设置不同

  一般EMAIL软件的"附件"功能都可以自动对信件先进行编码,然后送出。这样只要收信人使用的EMAIL软件(如Outlook XP等)能区别信件的编码方式,即可自动将信件解码。如果收发件人所用的EMAIL软件默认配置不同、收发件人自己定制的一些选项不同,在收到编码的信件后,系统就未必能识别出信件所用的编码方法,自然也无法自动解码,这样就会出现乱码。

  【解决办法】:如果你用OE收中文邮件,看到的是一篇乱码,可以查一下查看编码下,是否选了简体中文(GB2312,选对了就不会有问题。

  此外,你也可以用Winzip+IE来解码,方法是:把乱码邮件的内容,拷贝到剪贴板中,然后将其粘贴到记事本中,存为文本文件(例如LI.txt),再将其后缀改为.uue(改为LI.uue),点击此文件,会启动Winzip,然后启动IE,把Winzip中的001.txt文件拖到IE窗口中,就会显示邮件原来的内容,而不会看到乱码。 

    4
Email软件不能识别邮件的编码方法

  邮件的编码方式主要有:UuencodeBase64 encodeQPencodeBINHEX等。如果Email软件不能识别邮件的编码方法,就会显示邮件时出现乱码。因此,你可以根据邮件中的关键字符判断编码方法,选取合适的解码软件进行解码。

  (1)、QpencodeQP编码

  该编码全称“QuotedPrintable ContentTransferEncoding”,因为这种格式邮件的内容都是ASCII字符集中可以打印的字符,所以名称中含有printable。大体格式为:  =A1A=B1z=A6n=A1I=A7=DA=A6b=BA=F4=B8=F4=A4W=B1o......=E5==ABH=A5=F3=B0=DD=C3D=B1M=Aea=A1A......

  特征:内容通常有很多等号"=",因此不需要看"信头"也可以判断是否为QP编码。

  解码办法:把邮件中类似A1A=B1z=A6n…的部分编码全部复制下来,贴到一个新的纯文本文件中,然后在文件头部加入Quoted-pintable格式的文件头:

  Contenet-Type:text/plain;Charset=”GB2312”

  Content-Transfer-Encoding;Quoted-pintable

  然后以“EML”为后缀保存文件,用资源管理器双击打开文件即可显示正确的内容。如果还有部分汉字乱码,可以用WINZIP对存盘后的EML文件进行解压,即可看到正确的内容。

  (2MIME/BASE64 encode编码

  该编码方式将3个字节(8位)用4个字节(6位)表示,由于编码后的内容是6位的,因此可避免第8位被截掉,大体格式为:

    MIMEVersion1.0

    ContentTypetext/plain; charset="usascii"

    ContentTransferEncoding:base64

  StatusR SGmhQbF6pm6hSafapmK69Lj0pFexb6qsXqsT6Skp OWrSKXzs

  N3DRLFNrmGhQQ0Kq1sTqq6vdCx
0LF6tFit07Ddw0ShRw0KDQqtuqX9p2m2RL

  F6p9qoz6XOIE1Py3Jvc29mdCuiBJbnRlcm5ldCBN......

  特征:乱码前一般有如下几部分"信头"ContentType(内容类型)charset(字符集)ContentTransferEncoding(内容传输乱码方式)

  解码办法:用EMAIL软件,选择编码中BASE64 选项就可解码,解码后会消除乱码。

  (3)、BINHEX编码

  这种编码方式大体格式为:

  (This file must be converted with Binhex4.0)SGmhQbF6pm6hSafapmK69Lj0pFexb6qss

  Tqq6vdCx
0LF6tFit07Ddw0ShRw0KDQqtuqX9p2m2RLF6p9qoz6XOIE…….

  解码办法:用EMAIL软件对它解码;也可在EMAIL软件中保存乱码邮件,存为后缀为“.HQX”格式的文件,然后用WINZIP解码展开。解码后会消除乱码。

  (4)、UTIF-7/UTIF-8编码

  它们是UNICODE的两种转换码。

  (5)、Uuencode编码

  这是UNIX环境下使用的编码方式,目前已经很少用,大体格式为:

    begin 644 kk.zip M1G)O;2!I;&ENF)B3T!C(VEEFYC='4N961UG1W(%=E9"!.;W8@(#8@,3(ZM,SDZ,C4@,3DY@I296E:79E9#H@9G)O;2!F;&%B;6%I;"YF;&%BF9U:FET.................

     end

  特征:乱码前面含有"begin xxx",后面是编码前的原始文件名(如kk.zip);接着是已经过编码的信件内容(如上述的乱码部分);最后一行为"end"

  解码办法:可用BECKYEUDORAEMAIL软件,选择编码中相应的选项就可解码;也可以在EMAIL软件中保存乱码邮件,存为后缀为“.UUE”格式的文件,然后用WINZIP解码展开,解码后就会消除乱码。

   
七、发信方如何避免产生乱码邮件?

  为了避免别人收到乱码,发信方应该采取以下的措施:

  1、设定默认自动为7位编码

  在邮件客户端软件中的书写(撰写)选项中,设定默认自动为7位编码。因为当你发送 8位格式的文本文件时,必须事先进行编码,将文件转换为7ASCII码或更少位数的格式,然后才能保证文件的正确传送。收件人收到7位或更少位格式的邮件之后,可以再转换为8位的格式,这样就可以阅读了。

  2、发送前在签字栏中注明使用的汉字编码

  发送中文邮件前,最好在固定的签字栏中注明自己所使用的汉字码标准(例如GB2312、中文HZGBK);港澳台及东南亚地区邮件作者在使用BIG5 撰写完邮件、向内地发送前,要转换成上述三种简体国标码中的一种形式、并在签字栏中注明。如不转换则可能无法阅读,因为国内用户使用的邮件系统有很多不支持BIG5

  3、正确设置EMAIL软件

  选择优秀的Email收发软件可以有效地解决邮件乱码。如果使用Outlook 2003/XP,应在软件中把简体中文(GB2312)作为默认的邮件使用语言,选择国际设置”/为接收的所有邮件使用默认的编码。

  如果使用英文EMAIL软件,应设置成:文字设定DEFAULT CHARSETISO 8859-1LATIN1);编码方式ENCODINGQUOTED-PRINTABLE,不可选择7位(因为7位不支持中文);字码页CODE PAGE(可选):936HZ-GB-2312,以支持整字识别;邮件格式:MIME;字体:宋体

  如果使用其他中文EMAIL软件,应设置成:文字设定DEFAULT CHARSET:简体中文GB2312;编码方式ENCODINGQUOTED-PRINTABLE;邮件格式:MIME;字体:宋体

  4、发送重要信息时先发测试信

  发送重要信息时,为了确认是否无须编码即可发送正文,应该先发送测试信。而且还应确定收件人能否对附件文件进行解码。如果发送已经编码的邮件,则最好添加足够的信头信息,以便收件人知道所需的解码方法。建议对uuencode/UUDeview编码方式用uuencoding作信头,对mpack编码方式用base64 encoding作信头。

  如果发/收件人之间远隔万里,则传送过程中,第八位将可能被截掉。这时最好先在正文中用中文给收件人发一封测试信,并了解对方能否正确收到邮件正文。如果第八位被截掉,则收件人将会看到一些乱码,而不是上述的uu/b64/Qp等格式,而且这种信件几乎不可恢复。

  对策:在NetscapeEudoraPegasus Mail等你所使用的邮件系统中,选择其首选项或选项配置中的"Quoted Printalbe""MIME encoding

  5、尽量利用附件功能发送文件

  几乎所有的邮件软件,如NetscapeThe Bat!、 Becky! 等邮件系统附加这类非标准 ASCII码格式的文件时,附加文件通常可以自动进行“base64”方式编码(仅对附件部分进行编码)。在用"附件"方式发送邮件之前,无需进行编码;否则适得其反。因为邮件软件能够自动成功解码这类附加文件,因此在发送中文类邮件时应该首选这种方法。

  如果无法以附件方式发送文件,则必须在正文中发送中文或二进制文件

  八、收信方如何避免邮件显示乱码?

  收信方应该首先查找邮件的签字栏或正文中,有无指明对方使用的汉字编码类别;然后在Outlook XP“视图菜单下选中编码,随后将出现全部的汉字编码,在其中选择邮件所指明的一种。

  如果收到的邮件中没有指明所用的汉字编码,则可以顺序单击选择编码,直到邮件正文显示正确为止。如果你使用的是Netscape,则可在 Option菜单下的Document Encode中选择相应的项目。

  九、在跨语种操作系统间收发电子邮件,如何保证不会乱码?

  如果对方使用非中文系统,你给他发中文邮件时,他打开你发的中文邮件,就会出现乱码。解决办法有两种:

  1、用绘图软件书写中文邮件

  用画笔等绘图软件书写中文邮件,然后把中文邮件以GIF图形格式保存,最后压缩之、作为邮件附件发送。

  运行绘图软件,在图片中输入文字,用GIF格式保存,将属性置为黑白模式(以减少图片体积),然后用WINZIP把它压缩成ZIP格式,作为附件在邮件中发送,这样不管对方在何语言平台下,都不会出现乱码,收信人不必去下载PDF文件阅读器,阅读起来也很方便。

  2、使用专门的工具转换和阅读

  EMAIL AID之类的工具可以把中文邮件转换为AID格式文件,你把该格式文件发给对方,他再用EMAIL AID打开观看即可。

  EMAIL AIDUCWIN GOLD 1.0附带的)可以把文本文件转换为AID格式文件,大小只比原TXT文件增加几K。写好中文邮件后,用文本格式存盘,然后你运行EMAIL AID,以AID格式保存,最后你把AID文件连同EMAIL AID软件一起作为附件插在信中。对方收到信后,只需运行EMAIL AID,打开AID格式文件即可看到汉字,不管对方在何种语言平台下,都不会出现乱码。

 

产生死锁的原因和必要条件+解决死锁的基本方法

什么是死锁,如何避免死锁?      线程A需要资源X,而线程B需要资源Y,而双方都掌握有对方所要的资源,这种情况称为死锁(deadlock),或死亡拥抱(the deadly embrace)。 ...
  • cao478208248
  • cao478208248
  • 2014年10月13日 10:10
  • 1161

死锁,死锁产生的原因,产生死锁的必要条件和解决死锁的方法

死锁:指多个进程因竞争共享资源而造成的一种僵局,若无外力作用,这些进程都将永远不能再 向前推进。 安全状态与不安全状态:安全状态指系统能按某种进程顺序来为每个进程分配其所需资源,直 至最大需求...
  • shengabc
  • shengabc
  • 2015年08月09日 20:47
  • 3072

中文乱码的原因及解决方法

1、我们常用的编码表:   ASCLL:美国标准信息交换码      --->用一个字节的7位可以表示 ISO8859-1:拉丁码表、欧洲码表     --->用一个字节的8位来表示 GB2312:中...
  • u011521890
  • u011521890
  • 2015年10月19日 15:33
  • 5980

JSP技术中文乱码的原因及解决方法

  • 2013年03月11日 18:26
  • 275KB
  • 下载

中文乱码总结出现的原因,及解决方法,包括数据库乱码

  • 2010年12月05日 20:00
  • 386KB
  • 下载

文件上传文件名乱码的解决方法及形成乱码原因

采用Struts2提供的文件下载机制时,如果要下载的文件的的名字是中文的话,就会出现乱码问题。解决办法如下(只截取部分代码):              UserFavoritesAttachmen...
  • boboan2011
  • boboan2011
  • 2012年06月11日 14:53
  • 765

windows项目导入到ubuntu系统下出现中文乱码的原因和解决方法

此解决问题的方法我已经亲自使用过了,很好的决绝了问题 希望对大家有也一定的帮助。 原因:            把Windows下的工程导入到了Linux下Eclipse中,由于以前的工程代码,都...
  • cike110120
  • cike110120
  • 2013年08月19日 16:54
  • 1427

Code:Blocks 中文乱码问题原因分析和解决方法!

Code:Blocks 中文乱码问题原因分析和解决方法!  这里以Code::Blocks 10.5版本为蓝本进行说明。 首先,请在Code::Blocks里面输入标准的一个C程序...
  • Hy_Fighting
  • Hy_Fighting
  • 2012年04月21日 09:04
  • 210

PHP+MYSQL乱码:原因及解决方法

PHP+MYSQL乱码:原因及解决方法GB2312和UTF-8两个字符集的区别:GB2312是标准中文字符集,UTF-8 是UNICODE 的一种变长字符编码,即RFC 3629,可以解决多种语言文本...
  • appleplanter
  • appleplanter
  • 2011年06月25日 22:05
  • 145

Oracle汉字乱码问题原因及解决方法

原因: 出现中文乱码的主要原因是字符集不同。 在Oracle中,我们关心三个地方的字符集: l Oracle服务器内部的字符集 l NLS_LANG变量里保存的字符集 l...
  • ANITWORKER
  • ANITWORKER
  • 2018年01月11日 17:03
  • 11
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:乱码形成原因及其消除方法大全
举报原因:
原因补充:

(最多只允许输入30个字)