乔山办公网我们一直在努力
您的位置:乔山办公网 > word文档 > word打开是乱码-三类乱码原因分析

word打开是乱码-三类乱码原因分析

作者:乔山办公网日期:

返回目录:word文档

编码解码概述

我们都知道计算机不能直接存储字母,数字,图片,符号等,计算机能处理和工作的唯一单位是"比特位(bit)",一个比特位通常只有 0 和 1,是(yes)和否(no),真(true)或者假(false)等等我们喜欢的称呼。利用比特位序列来代表字母,数字,图片,符号等,我们就需要一个存储规则,不同的比特序列代表不同的字符,这就是所谓的"编码"。反之,将存储在计算机中的比特位序列(或者叫二进制序列)解析显示出来成对应的字母,数字,图片和符号,称为"解码",如同密码学中的加密和解密,下面将详细解释编码解码过程中涉及到的一些术语:


字符集合(Character set):是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等,简单理解就是一个字库,与计算机以及编码无关。


字符编码集(Coded character set):是一组字符对应的编码(即数字),为字符集合中的每一个字符给予一个数字,如 Unicode 为每一个字符分配一个唯一的码点与之一一对应。


字符编码(Character Encoding):简单理解就是一个映射关系,将字符集对应的码点映射为一个个二进制序列,从而使得计算机可以存储和处理。常见的编码方式有 ASCII 编码、ISO-8859-1(不支持中文)、GBK、GB2312(中国编码,支持中文)、UTF-8 等等,详情见表 1。


字符集(Charset):包括编码字符集和字符编码,如 ASCII 字符集、ISO-8859-X、GB2312 字符集(简中)、BIG5 字符集(繁中)、GB18030 字符集、Shift-JIS 等,即下文中提到的字符集。


表 1. 常见字符集和对应编码方式


字符集编码说明ASCIIASCII 编码ASCII字符集:主要包括控制字符(回车键、退格、换行键等);可显示字符(英文大小写字符、阿拉伯数字和西文符号。


ASCII 编码:用一个字节的低 7 位表示,0~31 是控制字符如换行回车删除等;32~126 是打印字符;ASCII的最大缺点是只能解决了部份西欧语言的显示问题,但对更多其他语言依然无能为力。ISO-8859系列ISO-8859系列 编码ISO-8859-X 字符集:扩展的 ASCII 字符集,包括 ISO-8859-1 ~ ISO-8859-15,涵盖了大多数西欧语言字符和希腊语。


ISO-8859-1 编码:用 8 位表示一个字符,总共能表示 256 个字符,但还是单字节编码,不能对双字节如中日韩等进行编码。GB2312GB2312 编码GB2312 编码 :它的全称是《信息交换用汉字编码字符集 基本集》,它是双字节编码,每个汉字及符号以两个字节来表示。第一个字节称为"高位字节"(也称"区字节)",第二个字节称为"低位字节"(也称"位字节")。总的编码范围是 A1-F7,其中从 A1-A9 是符号区,总共包含 682 个符号,从 B0-F7 是汉字区,它所收录的汉字已经覆盖中国大陆 99.75%的使用频率。对于人名、古汉语等方面出现的罕用字,GB2312 不能处理,这导致了后来GBK及GB 18030汉字字符集的出现。GBK GBK 编码GBK 编码: 全称叫《汉字内码扩展规范》,是在 GB2312-80 标准基础上的内码扩展规范,使用了双字节编码方案,其编码范围从 8140 至 FEFE(剔除 xx7F),共 23940 个码位,共收录了 21003 个汉字,完全兼容 GB2312-80 标准,支持国际标准 ISO/IEC10646-1 和国家标准 GB13000-1 中的全部中日韩汉字,并包含了 BIG5 编码中的所有汉字。GB18030 GB18030 编码GB18030-2005《信息技术中文编码字符集》是我国自主研制的以汉字为主并包含多种我国少数民族文字(如藏、蒙古、傣、彝、朝鲜、维吾尔文等)的超大型中文编码字符集强制性标准,其中收入汉字 70000 余个,解决了中文、日文、朝鲜语等的编码,兼容 GBK。采用变长字节表示即单字节、双字节和四字节三种方式对字符编码。可表示27484个文字Big5Big5 编码Big5 编码: 适用于台湾、香港地区的一个繁体字编码方案。使用了双八码存储方法,以两个字节来安放一个字,第一个字节称为"高位字节",第二个字节称为"低位字节。UnicodeUTF-8UTF-8:采用变长字节 (1 ASCII, 2 希腊字母, 3 汉字, 4 平面符号) 表示,在网络传输中即使错了一个字节,不影响其他字节;存储效率比较高,适用于拉丁字符较多的场合以节省空间,UTF-8 没有字节顺序问题,所以 UTF-8 适合传输和通信。UnicodeUTF-16UTF-16:从先前的固定宽度的 16 位编码(UCS-2)发展而来的,能够对 Unicode 的所有 1,112,064 个有效 code point 进行编码。 其编码方式是可变长度的,因为 code point 是用一个或两个 16 位代码单元编码的。在 UTF-16 文件的开头,会放置一个 U+FEFF 字符作为 Byte Order Mark(BOM):UTF-16LE(小端序)以 FF FE 代表,UTF-16BE(大端序)以 FE FF 代表,以显示这个文字档案是以 UTF-16 编码。UTF-16 比起 UTF-8,好处在于大部分字符都以固定长度的字节 (2 字节) 储存,但 UTF-16 却无法兼容于 ASCII 编码,实际使用也比较少。UnicodeUTF-32UTF-32 (或 UCS-4):对每一个 Unicode 码点使用 4 字节进行编码,其它的 Unicode 编码方式则使用不定长度编码。就空间而言,UTF-32 是非常没有效率的。尤其非基本多文种平面的字符在大部分文件中通常很罕见,以致于它们通常被认为不存在占用空间大小的讨论,使得 UTF-32 通常会是其它编码的二到四倍。虽然每一个码位使用固定长定的字节看似方便,它并不如其它 Unicode 编码使用得广泛。


乱码产生原因概述

乱码产生的根源一般情况下可以归结为三方面即:编码引起的乱码、解码引起的乱码以及缺少某种字体库引起的乱码(这种情况需要用户安装对应的字体库)


下面通过几个常见例子,从普通用户角度分别阐述这几种原因导致的乱码表象和解决办法。


编码引起的乱码表象分析


在英文版 windows 系统(实验使用的是 win7 64 位专业版),新建一个 txt 文件,写上"你好"保存。然后再双击打开,将会看到保存的内容变成了"??",如图 4 所示


图 4. 不合适的编码方式引起的乱码


原因分析:Windows 默认选用 ANSI 编码,英文版 Windows7 默认的系统 Locale 是 English(United States),对应的 codepage 为 437 即编码方式为 ISO-8859-1。我们用十六进制查看器可以看到"你好"对应的的十六进制数为"3F3F",这是因为中文和中文符号经过不支持中文的 ISO-8859-1 编码时,将不在字符集范围内的字符统一用 3F 表示,3F 对应的字符为问号"?",如图 5 所示。


解决办法:这种情况下形成的乱码是不可逆的,也就是说无论用什么解码方式都不能正确显示字符。我们在保存双字节字符的文档时,选择正确的编码方式,比如简中可以选择 GB2312 或者 UTF-8;繁中字符可以选择 BIG5 或者 UTF-8 等;如果安装的是英文操作系统,对于中文用户,可以将系统 Locale 更改为 Chinese(Simplified, PRC)。


图 5. 编码方式引起的乱码剖析


解码引起的乱码表象分析


在中文版 Windows 系统创建一个 txt 文件,写上"你好,中国"然后保存,再将这个 txt 文件复制到英文版 Windows 系统,双击打开,将会看到保存的内容变成"ÄãºÃ£¬Öйú"。


原因分析:中文版 Windows 系统创建的 txt 文件以默认的 ANSI 编码即 GB2312,当复制到英文版 Windows 系统时,Notepad 默认的解码方式为 ISO-8859-1,如图 6 所示的表象分析。这种情况下产生的乱码是可逆的,只要使用正确的解码方式,就可以正确显示文件中的字符。


解决办法:遇到类似解码问题引起的乱码,可以换一个编辑器打开,同时选择正确的解码方式。


图 6. 不正确的解码方式引起的乱码


缺少字体引起的乱码表象分析


在英文 Windows 系统打开一个文件发现里面的内容有些显示为方框。


原因分析:这个例子中显示为方框的都是中文字符。我们看到屏幕上的字符实际上经历了三种不同形态,从二进制字节序列转换成对应字符集中的码点,然后码点通过查找字体库找到对应的字符,最后通过点阵的方式显示在屏幕上。这里的方框是因为所查找的字体库缺少该码点对应的字符,或者根本没有安装该字体库,从而字符库中找不到的字符都以方框代替。


解决办法:安装对应的字体库,比如 Windows 系统在 C:WindowsFonts 目录下会有安装好的字体库列表。安装字体库比较简单,下载后解压,然后复制到对应系统的 Fonts 目录下。这里有个问题就是如何知道缺少何种字体?有些阅读器比如 Adobe 在打开文档时会提示缺少什么字体,但是很多编辑器或者阅读器是不提示的,这个时候可能需要根据经验来判断。


相关阅读

关键词不能为空
极力推荐

ppt怎么做_excel表格制作_office365_word文档_365办公网