当文件保存为ansi编码的文本文件时,文件编码为ANSI
在记事本中创建文本文件text.txt。默认的编码格式是ANSI。乍一看,我觉得是ASCII。输入的汉字没有乱码。
保存为test.txt,发给美国同事Bob。他也在用记事本,但不幸的是,我发现你的文件内容是这样的:
你可能以为你用的是中文系统,可以正常显示中文。他用的是英文系统,不能显示中文!
如果你这么认为,似乎很有道理。
但是请考虑这个:一个系统显示乱码,说明它不支持这种编码格式(或者解码方式不对)。难道英文系统不支持ANSI?难道ANSI是一种中文编码?
如果您身边有朝鲜语系统并且安装了记事本,则无论是默认代码还是ANSI代码,都将正常显示输入:
但是,如果您键入“汉字”,您可能会注意到乱码。
根据这个反例,ANSI不是一种中文编码。那么,ANSI到底是什么编码?
在十六进制编辑器中打开名为“汉字”的test.txt文件:
其中可以看出,baba和d7d6正是“汉”和“子”的GBK码值。
同样,在十六进制编辑器中打开名为“”的test.txt文件。
可以看出,c7d1、b1b9、beee只是“”和“”的EUC-KR码值。
因此,实际上ANSI并不是一个特定的字符代码,只是在不同的系统中,ANSI代表不同的代码。在你的美国同事鲍勃的系统中,ANSI代码实际上是ASCII代码。ASCII码不能代表汉字,所以汉字是乱码。另一方面,在你的系统中,“汉字”显示正常。ANSI代码实际上是一个GBK代码,但是在朝鲜系统中,“”显示正常。ANSI代码实际上是EUC-KR代码。
顺便说一下,电脑是美国人制造的。他们认为一个字节(可以代表256个代码)就足以代表英语世界中所有的字符、数字和常用的特殊符号(实际上ASCII只使用前127个代码)。后来,欧洲人退出了。法国人说,“小写字母需要加上音调符号(),等等。德国人需要加上“我也是几个字),)”。因此,欧洲人用ASCII码中没有用完的代码(128-255)作为自己唯一的代码名(后称为“扩展字符集”)。尼玛,等到我们中国开始用电脑,256码够用吗?我喜欢中国菜。汉字至少需要N百万。即使是小学生也要掌握300个单词。国际标准局终于拍到了。一个字节不够。让我们用多个字节来编码汉字。但是国家那么穷,打工那么贵,三个字节也不心疼。就两个字。先把几千个常用汉字编码,等国家强大了,人民富裕了再展开——于是GB2312应运而生。在台湾省同胞眼里,尼玛是简体字,不再要求我写繁体字。所以台湾省同胞自己造了繁体字,——大五,——大五。与此同时,其他国家也在对自己的文字进行编码。最后,微软陷入了一场苦战。”客人就是上帝。我必须符合你的准则。就是这样。默认情况下,出售给美国的系统用ASCII编码。卖给中国人的系统默认由GBK编码。卖给韩国人的系统默认编码是EUC-KR。但是,为了不让人误会我卖给你的系统功能不一样,我把你的默认代码都用ANSI表示吧。-虽然这个故事是虚构的,但“ANSI代码”真的只存在于Windows系统中。
那么Windows系统是如何区分ANSI背后的真实编码的呢?
在微软的“Windows代码页”(在命令行执行chcp命令时,会显示当前代码页值。比如简体中文码页的值是936)表示GBK编码,win95之前表示GB2312。有关更多信息,请参见Microsoftwindows。
我们能否通过修改Windows code pages的值来改变“ANSI编码”呢?
在命令提示符下,您可以使用chcp命令来更改当前终端的活动代码页。例如:
(1)执行:将chcp 437和代码页改为437后,当前终端默认代码为ASCII码(汉字变成乱码)。
2)执行:将chcp 936和码页改为936后,当前终端的默认码为GBK码(汉字仍可正常显示)。
以上操作仅适用于当前端子,不影响系统默认的ANSI代码。(在命令行中更改默认代码页(如何设置cmd代码页)。
Windows上的代码页是根据当前系统区域设置设置的。要更改系统默认代码,您可以更改系统区域设置。控制面板=时钟,语言,区域=地区,语言=管理=更改系统区域设置。
图中的系统区域设置为简体中文,这意味着当前的“ANSI代码”实际上是GBK代码。丰富的豆芽把它变成了韩语(k)
Orea)," ANSI代码"实际上是EUC-KR代码," "可以正常显示;悠哉豆芽把它改成英文(US)的时候,“ANSI码”其实是ASCII码,“汉字”和“”变成了乱码。(更改后需要重启系统。)
注意:locale是国际化和本地化中的一个重要概念,所以本文不做深入解释。
你上面说的都是windows的情形吧,Linux呢?
将带有“汉字”的文件test.txt复制到Linux上,用Emacs打开:
也是乱码!原因也是语言环境的问题:
打开前更改区域设置:
很正常。
参考:
知乎:Windows记事本的ANSI,Unicode,UTF-8编码模式有什么区别?GBK码GB2312简体中文码表韩文euc-kr码(即万松码)、Unicode码与原字形对照表维基百科:code page 1386 msdn:code page identifiers python CGI模块获取中文代码问题求解-部分解决方案http://www.360doc.com/内容/15/0105/15/9934052 _ 438371998 . shtml激情柜:字符编码注释:ASCII、Unicode和UTF-8本系列文章包括:
ANSI是什么代码?汉字:GB2312,GBK,GB18030,Big5。详细信息:Unicode、UTF 8、UTF 16、UTF 32、UCS-2、UCS-4。请注明出处:http://www.cnblogs.com/malecrab/p/5300486.html
转载于:https://www.cnblogs.com/malecrab/p/5300486.html
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。