用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后再打开:

ANSI是什么编码?相关推荐

  1. Ansi与Unicode编码

    视频教程: Ansi与Unicode编码 大家在编程时经常遇到的数据类型: ● Ansi: char   代表一个字符  (CHAR) char *  代表一个字符串指针   (PCHAR    PS ...

  2. 在项目中遇到导入TXT乱码现象。为什么UTF-8不行?ANSI是什么编码?

    问题描述: 在项目中导入中文txt文本,文本中的文字出现乱码现象. ANSI是什么编码?: 其实ANSI不是一种具体的编码格式,而是在不同的系统中,ANSI表示不同的编码.在英文的系统中ANSI表示的 ...

  3. ansi是什么编码_ANSI的完整形式是什么?

    ansi是什么编码 ANSI:美国国家标准协会 (ANSI: American National Standards Institute) ANSI is an abbreviation of the ...

  4. ANSI和UNICODE编码区别

    ASNI是ASCII的扩展,向下包含ASCII. 2.ASNI编码 对于ASCII字符仍以一个字节来表示,对于非ASCII字符则使用2字节来表示.并没有固定的ASNI编码,它跟"本地化&qu ...

  5. Ansi,UTF8,Unicode编码

    1.三种编码的回顾 Ansi字符串我们最熟悉,英文占一个字节,汉字2个字节,以一个/0结尾,常用于txt文本文件.  Unicode字符串,每个字符(汉字.英文字母)都占2个字节:在VC++的世界里, ...

  6. 编码格式(UTF-8 与 ANSI)各种编码解码(encode、decode)

    Windows:默认为 ANSI,记事本程序另存为处,可以设置其他编码格式: Ubuntu:默认为 UTF-8 1. ANSI ANSI 编码表示英文字符时用一个字节,表示中文用两个或四个字节 -- ...

  7. ASCII、ISO8859-1、GB2312、GBK、GB18030、BIG5、UNICODE、UTF-8、ANSI等字符集编码的讲解与特点

    世界是不断进步的,有了新需求就会产生新的事物.首先我们要知道在程序中经常遇到一些关于乱码的问题,而产生乱码的原因就是因为计算机直接存储字符时要把字符转为二进制,这其中不同的转换规则就对应不同的编码方式 ...

  8. unicode,ansi,utf-8,unicode big endian编码的区别

    为什么80%的码农都做不了架构师?>>>    随便说说字符集和编码 快下班时,爱问问题的小朋友Nico又问了一个问题: "sqlserver里面有char和nchar,那 ...

  9. [转]各种编码ANSI、GB2312、GBK、GB18030、UNICODE以及UTF-8傻傻分不清!

    计算机编程中的编码一直是让新手非常头疼的问题,特别是 GBK.GB2312.UTF-8 这三个比较常见的网页编码的区别,更是让许多新手晕头转向,怎么解释也解释不清楚,看一遍貌似懂了,但实际使用的时候又 ...

  10. ANSI编码和标准代码页(code page)

    电脑最先是美国人发明出来开始使用的,他们觉得一个字节(可以表示256个编码)表示英语世界里所有的字母.数字和常用特殊符号已经绰绰有余了(其实ASCII只用了前127个编码)于是他们使用ASCII编码, ...

最新文章

  1. 电视商城之maven热部署
  2. 如何查找不包含给定字符串模式的文件?
  3. 我的PCB职业,请大家多指教!
  4. 强化学习(8):Asynchronous Advantage Actor-Critic(A3C)算法
  5. 解决sqliteman创建失败的一种方法
  6. TX-LCN事务控制原理
  7. 计算机复制粘贴不可用问题解决,电脑复制粘贴功能失效无法复制粘贴文字怎么办...
  8. oracle中min语句用法,oracle中的聚合函数count、max、min、sum、avg以及NVL函数的用法...
  9. 信息传播模型——SIR的Python实现
  10. GEF(Graphical Editing Framework)介绍
  11. 苹果x看html文字有黑线,iPhonex屏幕旁边出现绿线怎么回事 iPhonex屏幕旁边绿线是什么问题...
  12. c语言反三角函数值域,反三角函数定义域和值域
  13. 钟表时钟时间管理PPT模板
  14. 全球及中国净水器市场产量趋势与竞争策略研究报告2022版
  15. 小甜饼cookie之精准投放
  16. App Store上架审核总被拒,可能的原因都在这儿了!
  17. system占用cpu过高查找问题思路
  18. 【ML】决策树(Decision tree)原理 + 实践 (基于sklearn)
  19. 计算机一级计算机应用试题及答案,计算机一级考试模拟题及答案
  20. “跳槽啦”一个广告菜鸟的自白

热门文章

  1. 手机pdf文件转语音_录音语音转文字手机版下载-录音语音转文字免费版下载v1.0.0...
  2. 用java遍历所有文件夹,将word文件转换为txt格式
  3. 实战 Flutter 象棋从零到上架
  4. python去除停用词_python jieba分词如何去除停用词
  5. java面试项目介绍,详细说明
  6. 复杂的拉普拉斯逆变换
  7. spring源码之下载及构建
  8. spring源码下载以及gradle的详细使用教程
  9. 咸阳机场地下停车场如何收费,咸阳机场停车收费价格
  10. python爬虫案例-爬取西刺免费代理服务器IP等信息