首页 - 开心名言 > 中文乱码问题的解决

中文乱码问题的解决

发布于:2024-03-21 作者:admin123 阅读:51

  本文是较详细介绍乱码问题的文章。由于本BBS的BUG,故对原文有小的改动。

  字符是计算机表达信息的主要方式,字符的主体部分是美国信息交换标准码

  ASCII,现代的 ASCII 是一个七位的编码标准,包括可打印符号、控制符号等。

  由于计算机通常用“字节(byte)”这个八位的存储单位来进行信息交换,因此不

  同的计算机厂家对ASCII 进行了扩充对值大于 127 的 128 个符号予以定义,并

  赋予符号的形状。如 MS-DOS 使用 OEM 字符集,Windows 支持 ANSI、Symbol、

  OEM 等字符集,它们在值为 127 以上的部分一般都是不统一的, 这些“扩展的

  ASCII”字符只有在特定的环境下才具有“交换”的意义。

    计算机以及很多计算机网络协议的制定都是建立在ASCII 码的基础上的,但

  是ASCII 码用于计算机信息的表示有很大的不足,主要表现在多国文字、图形、

  声音等二进制文件、信息压缩、信息保密等很多方面。 因此,在 ASCII 和扩展

  ASCII 码的基础上,用一定的规则定义一些新的信息表达形式,就形成了信息传

  输和处理中的一大类概念和事物,即编码和解码。当信息编码和解码能够统一的

  时候,信息是可以交换和被理解的;相反,当信息编码和解码不能够统一的时候,

  信息就不能被交换和理解,这就是“乱码”。(以下不再使用引号)

    乱码的产生既然是信息编码和解码不能够统一的结果,因此,解决乱码的过

  程就是找到和编码相统一的解码方法,并对计算机软件不能全自动进行适当解码

  的信息进行重新的处理和解码,使得恢复信息可以被理解和交换的目的。

    本文针对 BBS 上常见的问题,对初学者比较全的介绍一下各种乱码的产生、

  判断和解决方法。可以说,常见的乱码有这样一些规律:(1) 和汉字或其他国家

  的文字有关;(2) 经常发生在 email 的阅读中; (3) 和传送二进制文件有关;

  (4) 和信息的加密解密有关。而乱码的原因正如前面所说的,和软件的版本,即

  他们能够自动识别和使用的解码协议有密切的关系。本文的写作主要针对 DOS/

  Windows 操作系统的用户。

    本文以 email 和 WWW 中经常出现的、出学者不易理解的特殊标记、乱码等

  现象,以乱码的识别、原因和解决方法为主线,涉及:ROT13、汉字乱码、ANSI、

  UUENCODE、MIMENCODE、QUATED-PRINTABLE、HTML、 文件格式和数据加密等方面。

  是个大杂货店。

    “我遇到乱码怎么办?”这是几乎我们每个人都曾经遇到的问题。我想稍微

  总结一下这个大家关心的问题也有一些时间了,不过 Internet 博大精深,到动

  笔时感到知识实在是极度匮乏。那些曾经熟悉的东西写出来好像就不是那么回事。

  在做水木清华 BBS 病毒讨论区板主的这段时间里遇到的大量问题中, 更多的是

  出在与病毒相似却不是病毒的地方,比如计算机硬件软件本身的问题,某些国产

  反病毒软件因质量问题破坏文件和系统等等。所以,要把计算机用的更顺手,需

  要的是更多地了解你所使用的这个工具。防范病毒只是一个方面。一个新手,当

  你有机会迈进 Internet 的时候,你已经拥有这个博大精深的世界的一半了,只

  是有很多人还浑然不知。 Internet 就是你的老师,你自己就是你的老师。

    我希望大家对这个系列提出一些意见、补充和建议,以便修改其中文章中的

  错误、Bug 或充实没有概括到的内容。

  乱码大全(2)──ROT13

  Jvgu n tbbq pbafpvrapr bhe bayl fher erjneq, jvgu uvfgbel gur svany

  whqtr bs bhe qrrqf, yrg hf tb sbegu gb yrnq gur ynaq jr ybir, nfxvat

  Uvf oyrffvat naq Uvf uryc, ohg xabjvat gung urer ba rnegu Tbqf jbex

  zhfg gehyl or bhe bja.

  Wbua Svgmtrenyq Xraarql

    如果你自己能够看懂上面的短文,那么请忽略本文的其余部分。

    如果有人写来一封莫名其妙的信, 含有“V Ybir lbh!”这样的句子,也许

  你还有可能以为这是德语。其实这是一种最简单的通用编码──ROT13, 这个句

  子实际上是“I Love you!”。不懂德语的人经常要闹笑话,Usenet 上经常有这

  样的标题:This is not ROT13, its German. 或者 This isnt German, its

  ROT13. 足见这个误会是世界性的。

    ROT13 是一种简单的编码,它把字母分成前后两组,每组13个,编码和解码

  的算法相同,仅仅交换字母的这两个部分,即:[a..m] -- [n..z] 和 [n..z]

  -- [a..m] (-- Caesar 13)。 英国帝国大学计算机在线字典解释 ROT13 时说:

  “It is used to enclose the text in a sealed wrapper that the reader

  must choose to open - e.g. for posting things that might offend some

  readers, or spoilers. ” ROT13 用简易的手段使得信件不能直接被识别和阅

  读,也不会被搜索匹配程序用通常的方法直接找到。经常用于 USENET 中发表一

  些攻击性或令人不快的言论或有简单保密需要的文章。

    常见的 email/news reader 程序都可以对 ROT 13 进行解码,如 Netscape

  和 Microsoft News 等。一些 Text 编辑程序也可以实现 ROT13 的解码。 比如

  EditPad( 分类

  下面也可以下载)。由于 ROT13 是自逆算法,所以,解码和编码是同一个过程。

    下面的 C 程序是最短的 ROT13 处理程序,它只有78个字符。当然在MSVC编

  译中会得到没有库声明的警告或错误。

  main(c){while((c=getchar())+1)putchar(isalpha(c)?tolower(c)(出处: )

  下面的宏可用于 Word6、7 进行 ROT13 编解码:( 本程序的出处:Subject:

  Re: ROT13 Macro / From: wncoan@aol.com (WNCOAN) / Date: 1998/01/29 /

  Newsgroups: microsoft.public.word.programming )

  Sub MAIN

  StartOfDocument

  While Not AtEndOfDocument()

  If Asc(Selection$()) 64 And Asc(Selection$()) 91 Then

  newAsc = Asc(Selection$()) + 13

  If newAsc 90 Then newAsc = newAsc - 26

  CharRight 1, 1

  Insert Chr$(newAsc)

  ElseIf Asc(Selection$()) 96 And Asc(Selection$()) 123 Then

  newAsc = Asc(Selection$()) + 13

  If newAsc 122 Then newAsc = newAsc - 26

  CharRight 1, 1

  Insert Chr$(newAsc)

  Else

  CharRight

  EndIf

  Wend

  End Sub

  下面这些网址以 cgi 的方式提供在线的 ROT13 转换。

  

  

  

    到现在为止,您已经可以对本文开始的那一段代码进行解码了。那是美国前

  总统肯尼迪的一段演说。

  汉字乱码是一个古老的问题了。自从汉字走进计算机,关于汉字乱码的问题

  一天也没有消失过。有关汉字和 HTML 的问题,将在本文系列的稍后的文章中单

  独谈到。本文不准备重复 GB_2312-80(国标)、BIG5、GBK、HZ 的最基本的互相

  转换的问题,相关的内容可以在本 BBS Chinese 板询问。 这里以其他角度做一

  些补充。

    由于编码位置上的巧合和汉字平均出现概率上的统计,用GB环境看BIG5编码

  的文字,将有汉字显示成为日语的假名,这个是在GB环境下看到BIG5汉字的主要

  特征。上网时间长一些,就会积累一些经验,使得你能够一眼区分乱码的类型。

  比如下面的例子就是 BIG5:

    ¨睹絏〃blueseaれ睲地BBSΘ舧 BBSい锣更腊

  璸衡诀厩秆∕ㄏノ硁ン筁祘い笿龟悔拜肈セゅ更れ睲地 BBS

   Internet癚阶跋琌 telnet://bbs.tsinghua.edu.cn WWW砐拜

  琌 讽兵ン场骸ì锣更セゅ

  ぃ竒筁す砛(1) 锣更れ睲地 BBS 獺繷(2)ぃэゅ(3) 锣更度

  贺 BBS ㎝獶坝穨┦借呼翴 腨窽贺Αй脓腨窽獶盢

  セゅ┪Ы场ノヴタΑセ礛琿琌ゅ场だ

    常见的汉字乱码还有 HZ 编码,这是一种屏蔽最高位的汉字表示方法,它是

  在GB 和 BIG5 的基础上,用 ~{ 和 ~} 括起汉字编码的部分。比如:

    ~{!0BRBk4sH+!1#,WwU_#:~}bluesea~{#,K.DGe;*~}BBS~{3IT1!#;6S-TZ~}

  BBS~{VPW*TX#,0oVzvJ9SCHm~9}3LVPSv5=5DJ5~{NJLb!#1NDT-TXSZK.DGe;*~} BBS~{5D~} Internet ~{LVB[Gx!#5XV7JG#:~}

  telnet://bbs.tsinghua.edu.cn ~{#,~}~}

  ~}

  ~{1ND?IRT2;-9}WwU_TJPm#:~}(1) ~{W*TXK.DGe;*~} BBS ~{5DPEM7#;~}(2)

  ~{2;P^8DT-ND#;~}(3) ~{W*TX=vO^SZ8wVV~} BBS ~{:M7GILR5PTVJ5D8vHKMx5c!#~}

  ~{QO={8wVVPNJ=5D3-O.#,QO={7GWwU_=+1ND;rV2?SCSZHN:NU}J=3v~}

  ~{0f5D?/No!#1WTH;6NJGH+ND5DR;2?7V!#~}

    很多海外中文杂志,如著名的《华夏文摘》( )等都仍

  然采用 HZ 编码方法。HZ 编码用额外的控制序列来控制字形的显示, 字母和数

  字是不被编码的,它们在 ~{ 和 ~} 标记对的外面。这种编码不符合汉字与文本

  字符的固定映射规律,处理起来相对麻烦。著名的汉字平台──南极星 ( NJWIN

  1.6, 提供了灵活和强大的支持。

    海峡两岸的语言经过长期的发展,实际上已经不能形成一一对应的关系,GB

  和BIG5的转换也是如此。因此这种转换往往具有不可逆性,倒不是说一段文字不

  能在 GB 和 BIG5 之间互相转换,而是说一旦你转换错了,信息就不能复原。比

  如你拿一段本来的是 GB 的文字当作 BIG5, 然后再实施 BIG5 - GB 的转换,

  就会损失信息,这时逆变换将不能完全得到原来的文字。比如 SMTH WWW 发文时,

  本是 GB 的,错选了 BIG5 按钮就会如此,反之也类似。

    汉字的另一个问题是所谓的“半个汉字”乱码,由于很多英文编辑软件以字

  符为单位来处理文本,汉字被删除一半后,剩余的部分会和相邻的汉字重新组合,

  使得文本面目全非。因此,除了注意在输入、删除的时候注意这种问题外,还要

  注意不要在英文字处理软件中轻易使用“字符替换”功能,这往往会把一个汉字

  的后一个字符和相邻汉字的前一个字符当成一个汉字被替换掉。这种乱码最后往

  往令人莫名其妙、找不到原因。

    需要说明的是,简体和繁体这两个概念和GB、BIG5并没有逻辑上的联系,GB

  的定义是简体字,BIG5采用的是繁体字,但是为了阅读的方便,在各自的编码中

  再做一个内部字形或字体的映射,就形成了所谓 GB繁体或 BIG5简体之类的概念,

  他们仅仅是一些汉字软件提供的方便功能,如南极星等。我们常见的WWW 浏览器

  Microsoft Internet Explorer 4.x 和 Netscape Navigator 4.x 都已经内置了

  比较完善的汉字转换功能。加装了语言包的 IE 4.0 还使得我们脱离汉字平台也

  可以进行中文处理,并且可以处理大字符集 GBK 。详见Win95_win3.x 讨论区中

  “让Pwin95更顺手”系列之(11)。

    在中文平台上,很多人有不同的见解。本文的主旨与此无关,仅仅是综合各

  个方面的因素,我个人向计算机的初学者建议选择中文 PWindows 95 OSR2 或更

  高的版本作为最基本的操作环境。中文之星 ( 、

  / )

  等由于技术和企业行为的不稳定性,不适合作为具有依附性的中文平台。但是这

  些软件中的局部,如新拼音输入法、支持剪辑板的码转换器等还是具有一定特色

  的。如果有对这个问题感兴趣的讨论,请到Chinese 板搜索以前的标题继续讨论。

    在 Chinese Community Information Center (CCIC),集中了一些中文处理

  的比较完整权威的解决方案,该网点地址是 ,

  其中包括了各种操作系统、各种汉字编码的处理方案和软件。

    除了常见中文平台外,通过 、

   等共享软件网点,查询

  GB、BIG5、chinese 等关键字可以获得大量的小型应用程序,包括码转换器。尽

  管如此,本文还要重点推荐一些用于 DOS 的命令行处理工具, 具有使用方便、

  可以进行批处理等特点。他们是:

    c2t (将 GB 或 BIG5 转化为拼音)

    HZ (gb2hz hz2gb zw2hz)

     (convert gb to hz, hz to gb, zw to hz respectively)

    hc (convert between GB and BIG5)

    下载地址为:

    

    

    

    其他软件请到

  和 BIG5 属于两个不同组织各自制定的标准体系,对应汉字编码的转换都是通过

  表格来转换的,他们之间不存在任何内在的逻辑关系或函数,试图寻找这种公式

  的人,请不要白费精力。

    几乎所有新生的软件在中国使用都会面临一个汉字兼容的问题,比如新生的

  Java 及其开发环境、动态HTML领域等都从未幸免。 通过NT的资源存取能力可以

  实现英文软件的界面/资源汉化,由于 PWindows 95 对话框的缺省宋体的大小为

  9 磅,而英文 Windows 95 的相应值为 MS Sans Serif 8,所以很多英文软件在

  PWindows 中运行时, 界面中的字残缺不全,这些也可以通过资源的重新编辑予

  以调整。

    但是,软件内核的汉化不是可以轻易实现的。即使是厂家做的汉化工作也有

  非常粗糙的痕迹。比如 P-IE 4.0 在安装繁体汉字包后,PWindows Help 就产生

  了内码的混乱。这就是个严重的 Bug。有时只能随意选出一个具体的条目弹出帮

  助窗口,再反过来调出帮助主题窗口,偶尔还可以对付使用。或者你就再运行一

  份 NJwin,在 Option 中选择 Standard English/Western 。其实这一招在以前

  讨论 OutLook Express 看 BIG5 邮件的时候就用过了,也是个乱码的问题,详

  见 Win95_win3.x 讨论区精华区中的 “让PWin 95更顺手(9)─南极星与OutLook

  Express”。

              乱码大全(4)──BBS与ANSI

    ANSI (American National Standards Institute ) 规定了一组控制字符和

  键盘的扩充规则,本文不作为使用 ANSI 彩色和位置控制在 BBS上进行应用的初

  级指南。这方面的内容参见 BBSHelp 和 ASCIIart 板及其精华区。

    很多 BBS 的 的效果,而是把控

  制符号 01Bh 解释成为 * 号,这就形成了阅读 BBS 文章的特殊乱码效果。比如:

  *[1m (高亮度字)、*[1;5;33m (高亮度黄色闪烁字)、*[1;31;44 (高亮度蓝底红

  色字) 等等。

    目前,国内的著名 BBS, 水木清华、网易、蓝天等站的 WWW 转换程序都已

  经解决这个问题。在 Telnet 中发表文章可以使用 ANSI 控制,利用 MS-DOS 的

  Help 可以获得 ANSI 字符控制的详细信息。(如 C:\DOSHelp ANSI.SYS)。在使

  用位置控制的时候,应该尽量使用 ESC[s 和 ESC[u (存储和恢复光标位置)来控

  制文本,以免发生位置错乱,并尽量在每行结束的时候恢复默认的属性,以免因

  为翻页而造成ANSI控制的不完整。

    NetTerm 有那么点不太引人注目的小秘密,这就是它自己支持一些类似Ansi

  控制的扩充控制序列。曾经作为一个调剂的手段,为上 BBS的网虫增添了不少乐

  趣。随着清华 BBS 上的一些网虫不断“露一手”,现在全国很多 BBS 都使用了

  这些扩充的控制来修改标题栏、 状态栏,来表示对网虫的问候。如 北方交大、

  网易……。NetTerm 的扩充序列参见它的Readme文件或Virus 精华区“反病毒与

  黑客/工具/趣闻”目录下面的摘录。

中文乱码问题的解决

    Ansi 作为标准字符的一种扩展的表现手段, 起到了丰富色彩,活跃气氛的

  作用,这些作用的效果会随着阅读一篇文章的结束而结束,而很多扩展控制却可

  以留下来,改变你的标题栏状态栏,甚至打开你的浏览器,乃至死机。 Netterm

  在解释自己创立的扩充序列的一些 Bug也很明显地表现了出来,同时,还有很多

  终端程序在解释控制序列的时候,程序不够严密,对于非标准的序列往往会产生

  意外的后果。利用程序编制上的缺陷,采用类似 Ansi 序列的方法激活这些 Bug,

  这就是我们这里说的所谓“BBS ANSI 炸弹”。

    扩展控制序列的滥用,引起了 BBS上的一些争论,很多人表示反感。谁当初

  会想到围绕这个问题会有这样多的故事呢。不过我们今天不得不通过一种管理的

  手段来制约它,这一方面说明完整的管理制度是维护一个全局的必要手段,同时

  也说明在网络这个苑囿中,自觉二字还远没有达到理想的程度。经过不太长时间

  的讨论,终于有了结果。就是最终由 Leeward 站长修改 BBS 软件,把扩充序列

  的解释权交给用户,允许用户从个人参数设定中禁止这些效果。详细的信息请参

  考sysop 板的讨论,以及最后 Leeward 公布的解决办法。

    UUENCODE 在我们水木清华 BBS 已经讨论得很多了,关于 UUENCODE 的详细

  内容参见水木清华 BBS Virus 和Hacker 精华区中的“UUENCODE/decode 知识与

  使用入门”(一)~(四)。这里只简单提一下并作一些补充。 UUENCODE 的 UU 指

  用于 Unix 之间传送二进制文件,就是 Unix to Unix。在Email 或 News 中

  UUENCODE 经常用于 Attach 二进制文件。目前不仅Netscape、Eudora、MS-mail,

  甚至包括 Hotmail、usa.net之类的 Webmail 在内的绝大多数email程序都支持

  UUENCODE 的自动解码。在一些软件网点, 如 等,

  可以找到 UUENCODE 的源程序。

    UUENCODE 代码有下面的样子:当软件不能自动解码(如在telnet中访问BBS)

  时可以转寄到 email 中或通过剪辑板将 UUENCODE 代码存入文本文件,改文件

  名后缀为 UUE,然后通过 Winzip 解码。

  但是,即使是正确的 MIME 编码也可能因为文本格式不规范而不能正确解码,

  这个时候,你从 email 程序或 Hotmail 里面只能得到 BASE64 编码的乱码,而

  不能正确解码。我们在 Pwindiws 95 中推荐使用 UltraEdit 5.0, 并以此为例

  来讲处理过程。我们来看这样一封典型信:( 行号是为阅读清楚,不属于信的内

  容)。这封信是根据我帮助一个朋友解码的实例改的。

  01: From: "bluesea"

  02: To: "=?gb2312?B?sKLEvg==?="

  03: Subject: A test :)

  04: Date: Sat, 3 Jan 1998 15:31:38 +0800

  05: X-Mime-Autoconverted: from 8bit to BASE64 by ms1.inet.tw id PAA06553

  06: Content-Length: 222

  07:

  08:

  ICAgIKGwwtLC67TzyKuhsaOs1/fV36O6Ymx1ZXNlYaOsy67Evsflu6pCQlOzydSxoaO7ttOt1Nog

  09:

  QkJT1tDXqtTYo6yw7w0K1vq8xsvju/qz9dGn1d+94r72yrnTw8jtvP65/bPM1tDT9rW9tcTKtbzK

  10: zsrM4qGjsb7OxNSt1NjT2suuxL7H5buqIEJCUw0KtcQgSW50ZXJuZXQgzNbC28f4oaO12N

    这封信不能通过 OutLook Express 和 Winzip 恢复, 当然,我们还可以找

  其他程序,或者其他的 email 程序自动恢复信的内容,我们假设这些条件不符

  合,需要适当的手工恢复。我们能够认定信体是MIME/BASE64 编码,那么一定可

  以找到相应的解决办法。首先备份你的信。然后进行下面的处理:

    第一种方法,我们可以把原信的5、6两行换成下面的两行,注意第4、5行之

  间不要有空行。

  Content-Type: text/plain;charset="gb2312"

  Content-Transfer-Encoding: BASE64

  然后将文件

标签: #乱码 #中文 #转载 #解决 #问题

相关文章

  • 想知道什么是龙与地下城么?进来看看!!

    想知道什么是龙与地下城么?进来看看!!

    分不清ADND和DND、或不知道PH、DMG是什么的新手,请特别留意最后一段“ADD常用缩略语表”   魔幻世界之旅龙与地下城的故事   发表于大众软件CD杂志...

    2024-03-24

  • 记忆中老师的龌龊事[转帖]

    记忆中老师的龌龊事[转帖]

      大家都上了这么多年的学,记忆中有没有哪些猥琐的老师做过的龌龊之事?   1):大学时的摄影课中,给我们讲课的是一个从外面聘来的在摄影界颇有名气的老头子。而且...

    2024-03-24

  • 赵全生在联合国气候大会上 讲述建设美丽内蒙古故事

    赵全生在联合国气候大会上 讲述建设美丽内蒙古故事

      老徐头条巴黎讯(邢彦春)12月5日,主题为建设碳汇城市应对气候变化的巴黎联合国气候变化大会“中国角”系列边会举行。国家林业局气候办副主任、中国绿色碳汇基金会...

    2024-03-24

  • 分手的原因

    分手的原因

      分手的原因   在他大三的時候交了一個學妹,兩個人一個帥一個美,   簡直是學校裡最強的一道閃光,經過了約半年的交往後,   男同學想說也該去見見女方的父母...

    2024-03-24

  • [媒体约稿]《花蕊》约稿

    [媒体约稿]《花蕊》约稿

      约稿拉《花蕊》约稿拉.尤其欢迎搞笑的东东。稿费在千字100元—150元。每期评3篇好稿在杂志上公布并发一定奖金。   欢迎大家对这个栏目策划多提意见。   ...

    2024-03-24

  • 鲜为人知的数学家的故事

    鲜为人知的数学家的故事

      尼尔斯·亨利克·阿贝尔(N。H。Abel)1802年8月5日出生在挪威一个名叫芬德 的小村庄。有七个兄弟姐妹,阿贝尔在家里排行第二。他父亲是村子里的穷牧师,...

    2024-03-24

发表评论

自定义链接1

电话咨询
自定义链接2