关于文本乱码的问题
关于文本乱码的问题
在Windows平台下,进入DOS窗口(运行cmd),输入:chcp
可以得到操作系统的代码页信息,你可以从控制面板的语言选项中查看代码页对应的详细的字符集信息。
例如:
我的活动代码页为:936,它对于的编码格式为GBK。
ANSI码 (American National Standards Institute) - 美国国家标准学会标准码
ANSI 并不是某一种特定的字符编码,而是在不同的系统中,ANSI 表示不同的编码。如:在简体中文 Windows 操作系统中,ANSI 编码代表 GB2312 或 GBK 编码;在繁体中文 Windows 操作系统中,ANSI 编码代表 Big5。
随着计算机的不断发展,支持简体中文的字符集包括:GB2312 、GBK 、GB18030、Big5(繁体)。
中文一般使用 2 个字节编码,字符编码集容量大小: GB2312 < GBK < GB18030。
1、GB2312
规定中文占 2 个字节,小于 127 的编码按 ASCII 标准解释字符,当 2 个大于 127 的字符连在一起时,表示 1 个汉字。
2、GBK
规定对收录的每个字符采用 2 个字节表示,对于 ASCII 中的字符占 1 个字节。
3、GB18030
在 GBK 的标准上不断扩展字符,GB18030 的编码使用 4 个字节,兼容 GBK、GB2312 及 ASCII 标准。
即便使用 GB18030 编码,在显示常用汉字时仍然是 2 个字节(用 GBK 或 GB2312 方式解码),英文字母是1个字节。
4、Big5
在台湾、香港等地区,使用较多的是 Big5 编码,它的主要特点是收录了繁体字。而从GBK 编码开始,已经把 Big5 中的所有汉字收录进编码了。
三、Unicode
可容纳世界所有文字符号的国际标准编码,Unicode 编码规定中文占 2 个字节,英文占 2 个字节。由 Unicode 编码方案衍变出 UTF-8、UTF-16、UTF32。
1、UTF-32
规定对 Unicode 字符集里的每个字符都用 4 字节来表示,因此 UTF-32 不兼容 ASCII 编码,也就是说 ASCII 编码的文件用 UTF-32 标准来打开会成为乱码。
优点:编码简单,解码也很方便,读取编码的时候每次都直接读 4 个字节,不需要加其它的判断。
缺点:浪费存储空间,不兼容ASCII码(一个英文字母要4个字节表示),在存储的时候需要指定字节顺序。
2、UTF-16
UTF-16 使用 2 或 4 个字节为每个字符编码,其中大部分汉字采用 2 个字节编码,少量不常用汉字采用 4 个字节编码。
缺点:仍不兼容 ASCII 码(一个英文字母要用2个字节来表示),仍有大小端格式问题。
3、UTF-8
如今有些中文网站也常用 GBK 编码,而不用 UTF-8 编码,因为 UTF-8 编码的中文字符占 3 个字节,造成资源浪费。
变长编码方式,编码有 1、2、3、4 字节长度的方式,每个 Unicode 字符根据自己的编号范围去进行对应的编码。
如果第一个字节的 bit 位以 0 开头,那就是 ASCII 字符(解决了ASCII码的兼容问题),以单字节进行解析;如果第一个字节的数据位以“110”开头,就按双字节进行解析,3、4 字节的解析方法类似。
优点:兼容了 ASCII 码,节约空间,且没有字节顺序的问题。
文本编辑器中默认是ANSI,也就是GBK,所以打开其他编码文件时,显示乱码。有的编辑器可以自动判断文件编码,用此编码打开(比如cnbook),可以正常显示,但有的不能,需要自己选择(可以选择的话),如果想显示,就得用专门的软件转换编码,例如用老马的TextForever,可以转换各种编码。cnbook也可以另存为其它编码,但是,如果用cnbook另存为big5文件,实验证明似乎不太准,再次用cnbook打开时,显示许多?号。
这两天,因为把文件第一行做成文件名,发生了文件名乱码的问题。这就是源文件不是ANSI编码,文本中的内容变成文件名,系统当然不能正常显示。这时需要先把文件转换编码。比如把Big5编码转成GB,然后再换文件名,文件名编码变成了ANSI,就能正常显示了。
至于一个文本是什么编码,一般我们不知道,但可以检测。有一个在线检测网站,可用。cnbook打开时,可以自动识别编码,点击另存为,可以看见编码,要转成ANSI(GBK),可在列表中选取即可。
2021-07-26
今天发现,cnbook可以将ANSI编码的文件另存为Big5编码(及其他编码),反之亦可,换句话说,它能够转换文件编码。也即,它打开文件时自动识别,另存为的时候可以选择其他编码。另存为界面下方显示当前文件的编码。这样就不必专门去识别了。要选择其他编码就在这里选。原用cnbook打字的原ANSI编码文件,实际是GB2312。如果用老马的TextForever,从GB转成Big5,则再用cnbook打开,显示正常繁体字(Big5编码自动识别)。如果从GBK转成Big5,则有部分乱码。cnbook默认的不是GBK吗?闹糊涂了。
另,关于文件名乱码。试验了Big5编码的文件,如果用文件第一行作为文件名(用拖把更名器做),就显示文件名乱码。说明文件名是Big5编码,当然系统显示乱码。以后碰上文件名乱码的情况,可以直接改名,就是ANSI编码了。但假如不知道原文件名是什么,无法改,可以把这些乱码文件名拷贝在一个文件中,以ANSI(即系统默认)保存成一个ANSI编码文件,这时默认编码打开就是乱码。但是选择Big5编码重读(EverEdit可以手工选择编码),就显示正常繁体字了。把这个内容是文件名的文件保存为GBK,(或GB18030),把乱码的文件名转成了系统可以正常显示的文件名,然后根据这个手工改文件名。这就解决了文件名乱码复原的问题。为了确定哪个文件名对应原来的哪个,不妨先编号。数字是ASCII编码,在各种编码中兼容不变。
假如知道乱码的文件名编码,比如说知道他是Big5编码,可以使用菲菲更名这个工具,将其变成GBK编码。选高级更名,里边有一项功能,就是改变文件名编码。
2021-07-27
今天发现:“更名大师”也有把文本全文转换编码功能。实验了gb转Big5,成功,没有错误。
它也有把文本第一行作为文件名的功能。总之,这个软件功能强大。
2021-08-01