ANSI是什么编码?

原文:http://www.cnblogs.com/malecrab/p/5300486.html

用Notepad++创建一个文本文件text.txt,其默认编码格式为ANSI(乍看之下,还以为是ASCII呢),输入汉字居然不是乱码:

保存为test.txt,发送给你美国的同事Bob。他也用Notepad++,不幸的是,却发现你的文件内容是这样的:

也许你会认为:你用的是中文系统,能正常显示中文;他用的是英文系统,不能显示中文!

这么想,好像很有道理呢!

但是再细想一下:一个系统显示乱码,说明它不支持这种编码格式(或者解码方式不对)。难道英文系统不支持ANSI?难道ANSI是一种中文编码?

如果你身边有一个韩文系统,也装一个Notepad++,默认还是ANSI编码,你可以输入“한국어”,发现也能正常显示:

但是你要输入“汉字”可能就会发现是乱码了...

通过这个反例,就可以说明ANSI不是一种中文编码。那么,ANSI到底是什么编码?

用十六进制编辑器打开内容为“汉字”的test.txt文件: 

你会发现:其中baba和d7d6正好是“汉”和“字”两个字的GBK编码值。

同样,用十六进制编辑器打开内容为“한국어”的test.txt文件:

你会发现:其中c7d1、b1b9和beee正好是“한”、“국”和“어”三个字符的EUC-KR编码值。

由此可以看出:其实ANSI并不是某一种特定的字符编码,而是在不同的系统中,ANSI表示不同的编码。你的美国同事Bob的系统中ANSI编码其实是ASCII编码(ASCII编码不能表示汉字,所以汉字为乱码),而你的系统中(“汉字”正常显示)ANSI编码其实是GBK编码,而韩文系统中(“한국어”正常显示)ANSI编码其实是EUC-KR编码。

话说计算机是由美国搞出来的嘛,他们觉得一个字节(可以表示256个编码)表示英语世界里所有的字母、数字和常用特殊符号已经绰绰有余了(其实ASCII只用了前127个编码)。

后来欧洲人不干了,法国人说:我需要在小写字母加上变音符号(如:é),德国人说:我也要加几个字母(Ä ä、Ö ö、Ü ü、ß)。于是,欧洲人就将ASCII没用完的编码(128-255)为自己特有的符号编码(后来称之为“扩展字符集”)。

等到我们中国人开始使用计算机的时候,尼玛,256个编码哪够?我泱泱大中华,汉字起码也得N多万吧,就连小学生都得要求掌握两三千字。国标局最后拍板:一个字节不够,那我们就用多个字节来为汉字编码吧,但是,国情那么穷,字节那么贵,三个字节伤不起,那就用俩字节吧,先给常用的几千汉字编个码,等以后国家强盛了人民富裕了,咱再扩展呗---于是GB2312就产生了。

台湾同胞一看,尼玛,全是简体字,还让不让我们写繁体字的活了,于是台湾同胞也自己弄了个繁体字编码---大五码(Big-5)。同时,其它国家也在为自己的文字编码。最后,微软苦逼了:顾客就是上帝啊,你们的编码我都得满足啊.

这样吧,卖给美国国内的系统默认就用ASCII编码吧,卖给中国人的系统默认就用GBK编码吧,卖给韩国人的系统默认就用EUC-KR编码,但是为了避免你们误会我卖给你们的系统功能有差异,我就统一把你们的默认编码都显示成ANSI吧。---本故事纯属虚构,但“ANSI编码”确实只存在于Windows系统。

那么Windows系统是如何区分ANSI背后的真实编码的呢?

微软用一个叫“Windows code pages”(在命令行下执行chcp命令可以查看当前code page的值)的值来判断系统默认编码,比如:简体中文的code page值为936(它表示GBK编码,win95之前表示GB2312,详见:Microsoft Windows' Code Page 936),繁体中文的code page值为950(表示Big-5编码)。

我们能否通过修改Windows code pages的值来改变“ANSI编码”呢?

命令提示符下,我们可以通过chcp命令来修改当前终端的active code page,例如:
   (1) 执行:chcp 437,code page改为437,当前终端的默认编码就为ASCII编码了(汉字就成乱码了);
   (2) 执行:chcp 936,code page改为936,当前终端的默认编码就为GBK编码了(汉字又能正常显示了)。
  上面的操作只在当前终端起作用,并不会影响系统默认的“ANSI编码”。(更改命令行默认codepage参看:设置cmd的codepage的方法)。

Windows下code page是根据当前系统区域(locale)来设置的,要想修改系统默认的“ANSI编码”,我们可以通过修改系统区域来实现(“控制面板” =>“时钟、语言和区域”=>“区域和语言”=>“管理”=>“更改系统区域设置...”):


图中的系统locale为简体中文,意味着当前“ANSI编码”实际是GBK编码。当你把它改成Korean(Korea)时,“ANSI编码”实际是EUC-KR编码,“한국어”就能正常显示了;当你把它改成English(US)时,“ANSI编码”实际是ASCII编码,“汉字”和“한국어”都成乱码了。(改了之后需要重启系统的。。。)

说明:locale是国际化与本地化中重要的概念,本文不深入讲解该内容。

你上面说的都是windows的情形吧,Linux呢?

将前述内容为“汉字”的文件test.txt拷贝至Linux下,用Emacs打开:

也是乱码!原因也是locale的问题:


更改locale后再打开:

正常显示了。。。

   参考:

  • 知乎:

    Windows 记事本的 ANSI、Unicode、UTF-8 这三种编码模式有什么区别?

  • GBK编码

  • GB2312简体中文编码表

  • 韩国euc-kr码(即Wansung码)与Unicode码及原字形对照表

  • 维基百科:Code page 1386

  • MSDN:Code Page Identifiers

  • python CGI模块获取中文编码问题解决- 部分方案

  • http://www.360doc.com/content/15/0105/15/9934052_438371998.shtml

  • 阮一峰:字符编码笔记:ASCII,Unicode和UTF-8

    推荐阅读:

    专辑|Linux文章汇总

    专辑|程序人生

    专辑|C语言

嵌入式Linux

微信扫描二维码,关注我的公众号 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/467249.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

R语言数据分析过程

R语言数据分析前期&#xff1a;预处理过程&#xff0c;供自己查阅&#xff0c;欢迎大家指正。 利用R语言导入数据&#xff1a; taobao<-read.csv("taobao.csv",stringsAsFactors F) 我最常用到就是read.csv&#xff0c;其中stringsAsFactorsF很重要&#xff0c;不…

苏州,遇见NXP痞子衡

昨天的文&#xff0c;今天发--晚上打球照片&#xff0c;大家都是1.8的&#xff0c;结果拍出来变矮了因为公司项目问题&#xff0c;今天飞苏州&#xff0c;昨晚上就得到了命令&#xff0c;早上直接从家里开拔&#xff0c;这次去苏州提前跟痞子衡说了情况&#xff0c;原因是上次我…

Android中GC的触发时机和条件

本文分析基于Android R(11)源码Java对象的创建由Allocator负责&#xff0c;回收由Collector负责。从Android O开始&#xff0c;对于前台应用默认的GC Collector是CC(Concurrent Copying) Collector&#xff0c;与之相匹配的Allocator则是Region-based Bump Pointer Allocator(w…

【华为出品】物联网全栈开发实战营第2期来啦!送海思开发板

物联网一直在改变我们生活的方方面面。可穿戴设备有助于监控我们的偏好、习惯和健康状况。智能家居设备可提高家居的舒适度、安全性和便利性。城市利用连接的数字设备收集的海量数据(数十亿个)来改善城市规划。制造商使用工业物联网设备来优化工厂车间的操作。据MarketsandMark…

2017年12月计算机一级c,2017年12月计算机二级C语言考试操作题冲刺卷(2)

三. 程序设计题3 [简答题]请编写函数fun&#xff0c;其功能是&#xff1a;移动一维数组中的内容&#xff0c;若数组中有n个整数&#xff0c;要求把下标从0&#xff5e;P(含P&#xff0c;P小于等于n-1)的数组元素平移到数组的最后。例如&#xff0c;一维数组中的原始内容为&…

给楠哥准备的入门单片机

---- 少儿编程前几天&#xff0c;珠海的三哥的老婆微信问我「我想给wending报名这个少儿编程课程&#xff0c;你帮我看看怎么样&#xff1f;」我看了下&#xff0c;除了价格还可以&#xff0c;其他都不怎么样&#xff0c;因为报名了这个课程&#xff0c;大家都知道你们家挺有钱…

应届生昆山offer和上海户口offer要如何选择?

这两天还在苏州&#xff0c;没有感受苏州的什么好地方&#xff0c;天气有点微凉&#xff0c;有秋天的味道&#xff0c;同行的何总是一个很闷的人&#xff0c;我总想让他跟我说说故事&#xff0c;每次他都说「我是一个没有故事的男人」&#xff0c;是的&#xff0c;一个从毕业就…

html5--3.7 input元素(6)

html5--3.7 input元素(6) 学习要点 input元素及其属性input元素 用来设置表单中的内容项&#xff0c;比如输入内容的文本框&#xff0c;按钮等不仅可以布置在表单中&#xff0c;也可以在表单之外的元素使用input元素的属性 type属性&#xff1a;指定输入内容的类型&#xff0c;…

计算机or笔记本,笔记本or台式机?大学生第一个烦恼被它解决了

原标题&#xff1a;笔记本or台式机&#xff1f;大学生第一个烦恼被它解决了台式电脑还是笔记本&#xff1f;许多大学生在选择第一台大学电脑的时候都会面临这个问题。初秋的风带着点点凉意悄然走进了大学校园&#xff0c;开学季来临&#xff0c;又一批莘莘学子即将满怀青春的梦…

把编译时间加入到目标文件

原文&#xff1a;https://www.cnblogs.com/pingwen/p/8183728.html1、问题背景&#xff1a;如何保证发布出去的bin文件是最终测试通过的版本&#xff1f;一般的来讲&#xff0c;代码到了测试后期&#xff0c;master分支就不会频繁的提交了&#xff0c;并且提交也会更加谨慎。但…

大数据基础篇(一):联机分析处理(OLAP) 与 联机事务处理(OLTP)

联机事务处理(OLTP) OLTP也称实时系统(Real Time System)&#xff0c;支持事务快速响应和大并发&#xff0c;这类系统典型的有ATM机(Automated Teller Machine)系统、自动售票系统等&#xff0c;但有些银行转账并不是实时到账的。OLTP反映企业当前的运行状态&#xff0c;完成企…

[JavaScript] 正则表达式

简单模式• 创建&#xff1a; 一个文本格式或正则表达式构造函数 文本格式&#xff1a; /pattern/flags 正则表达式构造函数&#xff1a; new RegExp("pattern"[,"flags"]); • 参数说明&#xff1a; pattern -- 一个正则表达式文本 flags -- 如果存…

1核2G云服务器 标准型S4 S5,腾讯云服务器标准型S4和S5配置性能参数区别及选择攻略...

腾讯云服务器标准型S4和标准型S5实例有什么区别&#xff1f;标准型S5相对于S4是新一代云服务器规格&#xff0c;S5实例CPU采用2.5GHz主频至强Cascade Lake&#xff0c;S4实例处理器采用2.4GHz主频至强Skylake&#xff0c;腾讯云S4/S5均为标准型服务器&#xff0c;具有均衡的计算…

单精度浮点数与十六进制转换

#include <stdio.h>/*--------------------------- 十六进制到浮点数 ---------------------------*/ float Hex_To_Decimal(unsigned char *Byte,int num) { #if 0char cByte[4];//方法一for (int i0;i<num;i){cByte[i] Byte[i];}float pfValue*(float*)&cByte;…

zipline-benchmarks.py文件改写

改写原因&#xff1a;在这个模块中的 get_benchmark_returns() 方法回去谷歌财经下载对应SPY&#xff08;类似于上证指数&#xff09;的数据&#xff0c;但是Google上下载的数据在最后写入Io操作的时候会报一个恶心的编码的错误&#xff0c;很烦人&#xff0c;时好时坏的那种&a…

css普通压缩不去,使用css-loader的minimize压缩css不起作用?

{ test: /\.(scss|css)$/, use: [!env.production? style-loader: MiniCssExtractPlugin.loader,{ loader: css-loader, options: { modules: true, minimize: true //设置css压缩}},{ loader:…

华为3COM交换机PVLAN配置使用说明

1.  PVLAN的引入   <?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /><?xml:namespace prefix v ns "urn:schemas-microsoft-com:vml" />在实际应用中有这样一个需求&#xff0c;组网图如上图所示。    …

Linux cpuidle framework

背景Kernel版本&#xff1a;4.14ARM64处理器使用工具&#xff1a;Source Insight 3.5&#xff0c; Visio1. 介绍在Linux OS中&#xff0c;Idle进程的运行会让CPU进入cpuidle状态。当没有其他进程处于运行状态时&#xff0c;Scheduler会选择Idle进程来运行&#xff0c;此时CPU无…

Linux利器:QEMU!用它模拟开发板能替代真开发板?

不想错过我的推送&#xff0c;记得右上角-查看公众号-设为星标&#xff0c;摘下星星送给我&#xff01;QEMU&#xff0c;搞嵌入式开发的一定不陌生&#xff0c;最近各大群里都讨论疯了&#xff0c;说它是Linux利器一点也不夸张。它是一款知名的而且开源的模拟器&#xff08;官网…

CPU怎么认识代码的?

# 语言这个东西&#xff1f;首先说明下&#xff0c;我们正常使用的python、C、C语言等等&#xff0c;我们自己能读得懂的语言&#xff0c;包括汇编语言&#xff0c;CPU都是不认识的&#xff0c;CPU 只认识一种语言&#xff0c;那就是 机器语言&#xff0c;也就是我们很多人&…