永发信息网

请教电脑高手:中文字符编码问题

答案:1  悬赏:30  手机版
解决时间 2021-11-07 16:12
  • 提问者网友:棒棒糖
  • 2021-11-07 12:54
请教电脑高手:中文字符编码问题
最佳答案
  • 五星知识达人网友:一袍清酒付
  • 2021-11-07 13:34
那个是ANSI,不是ASCII。这涉及到一个代码页的问题,简体中文系统的编码是GBK,它是一种基于ASCII的编码方式,代码页是936。这种编码方式采用的避免出现乱码的方法是,尽量避免使用26个英文字母和常用数字,用ASCII编码的制表符区域以及尽可能不常见的字母组合来避免乱码的问题。但这样会导致其他代码页的ANSI编码产生乱码,如法语的Français在中文系统会误认成Fran鏰is,因为ç编码是$E7,a的编码是$61,$E761这个编码正好是GBK代码页中的“鏰”字。但是这样处理对付英语和汉语已经足够了,每次记事本打开ANSI编码的文档时,都是以简体中文的936代码页进行解析的,所以你能看到正常的文字。不知你玩儿过日本的游戏没有,他们的安装光盘里的TXT说明文件如果不以Unicode方式保存,在简体中文的机器上就是乱码,其他语言也一样,都是因为代码页的不同。

可能你会问,为什么AB、CD这样的组合不会乱码?那是因为GBK编码页考虑到了所有这样的组合,在$4142、$4344两处都没有设置任何字符,如果它设置了就肯定会乱码。ç不包含在英语字符里,因此GBK放心大胆以它开头去编码双字节汉字,导致了前面说的Fran鏰is问题。一般来说ANSI的编码为了迎合英语,都把前127个字符($7F前)设置的和ASCII里一模一样,以防止乱码发生,当然也有例外,如JIS-Shift和韩文编码将反斜线的编码\($5C)代换了。在命令提示符里输入Edit打开DOS下的编辑器,那个是真正只认ASCII的编辑器,在那里中文自然就是乱码了,和DOS时代你开CCED之类的中文处理软件之前没开UCDOS看到的情形是相似的,和你在Windows 98的那个MS-DOS窗口模式下显示制表符,将连续的表格线━━($C4 C4)识别为“哪($C4C4)”字的情形也很相似。可以做个试验,在记事本里输入Bush hid the facts或者“联通”再保存,内容也会变成乱码(XP之后系统无效),因为记事本是一种较为低级的编辑器,一些早期的文本编辑器由于设计不良,不会在文件头部加入表示编码的$FF FE或$FE FF标识(因为它们可能被设计为只支持一种编码),因此记事本会调用IsTextUnicode去判断是什么代码页,它误将1252代码页判断为UTF-16LE导致解析错误。而“联通”的问题则是GBK代码页编码$C1AA CDA8不小心在IsTextUnicode里符合UFT-8的编码标准。

当然以上是两种极端的情况,大部分情况下,特别是文字非常多的时候,系统的代码页判断是正确的,因此你看不到记事本乱码。不过,记事本只有两种编码页功能,一种是ANSI页,一种是Unicode页,ANSI页的编码页就取决于你使用的操作系统文字代码页。所以看外文ANSI代码页的TXT时仍有可能乱码。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯