编码

论坛 期权论坛     
选择匿名的用户   2021-5-30 00:12   168   0
<p>阮一峰的网络日志  <a href="http://www.ruanyifeng.com/blog/">首页</a>  <a href="http://www.ruanyifeng.com/blog/archives.html">档案</a></p>
<p> </p>
<p><a href="http://www.ruanyifeng.com/feed.html"></a></p>
<ul><li>上一篇:<a href="http://www.ruanyifeng.com/blog/2007/10/selections_of_short_chinese_classical_articles_for_high_schoolstudents.html">《新编高中文言文助读》</a></li><li>下一篇:<a href="http://www.ruanyifeng.com/blog/2007/10/25_best_editorial_cartoons_of_2006.html">2006年最佳政治漫画</a></li></ul>
<p>分类:</p>
<p> </p>
<ul><li><a href="http://www.ruanyifeng.com/blog/computer/">理解计算机</a></li></ul>
<h1 id="page-title">字符编码笔记:ASCII,Unicode 和 UTF-8</h1>
<p>作者: <a href="http://www.ruanyifeng.com/">阮一峰</a></p>
<p>日期: <a href="http://www.ruanyifeng.com/blog/2007/10/">2007年10月28日</a></p>
<p><a href="http://www.zhufengpeixun.cn/main/index.html?ref&#61;ruanyifeng"><img alt="珠峰培训" class="blockcode" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-ca221f894d231ee7c46b69245f72b537.png"></a></p>
<p>今天中午,我突然想搞清楚 Unicode 和 UTF-8 之间的关系,就开始查资料。</p>
<p>这个问题比我想象的复杂,午饭后一直看到晚上9点,才算初步搞清楚。</p>
<p>下面就是我的笔记,主要用来整理自己的思路。我尽量写得通俗易懂,希望能对其他朋友有用。毕竟,字符编码是计算机技术的基石,想要熟练使用计算机,就必须懂得一点字符编码的知识。</p>
<h2><strong>一、ASCII 码</strong></h2>
<p>我们知道,计算机内部,所有信息最终都是一个二进制值。每一个二进制位(bit)有<code>0</code>和<code>1</code>两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从<code>00000000</code>到<code>11111111</code>。</p>
<p>上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为 ASCII 码,一直沿用至今。</p>
<p>ASCII 码一共规定了128个字符的编码,比如空格<code>SPACE</code>是32(二进制<code>00100000</code>),大写的字母<code>A</code>是65(二进制<code>01000001</code>)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的一位统一规定为<code>0</code>。</p>
<h2><strong>二、非 ASCII 编码</strong></h2>
<p>英语用128个符号编码就够了,但是用来表示其他语言,128个符号是不够的。比如,在法语中,字母上方有注音符号,它就无法用 ASCII 码表示。于是,一些欧洲国家就决定,利用字节中闲置的最高位编入新的符号。比如,法语中的<code>é</code>的编码为130(二进制<code>10000010</code>)。这样一来,这些欧洲国家使用的编码体系,可以表示最多256个符号。</p>
<p>但是,这里又出现了新的问题。不同的国家有不同的字母,因此,哪怕它们都使用256个符号的编码方式,代表的字母却不一样。比如,130在法语编码中代表了<code>é</code>,在希伯来语编码中却代表了字母<code>Gimel</code> (<code></code>),在俄语编码中又会代表另一个符号。但是不管怎样,所有这些编码方式中,0--127表示的符号是一样的,不一样的只是128--255的这一段。</p>
<p>至于亚洲国家的文字,使用的符号就更多了,汉字就多达10万左右。一个字节只能表示256种符号,肯定是不够的,就必须使用多个字节表达一个符号。比如,简体中文常见的编码方式是 GB2312,使用两个字节表示一个汉字,所以理论上最多可以表示 256 x 256 &#61; 65536 个符号。</p>
<p>中文编码的问题需要专文讨论,这篇笔记不涉及。这里只指出,虽然都是用多个字节表示一个符号,但是GB类的汉字编码与后文的 Unicode 和 UTF-8 是毫无关系的。</p>
<h2><strong>三. Unicode</strong></h2>
<p>正如上一节所说,世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。因此,要想打开一个文本文件,就必须知道它的编码方式,否则用错误的编码方式解读,就会出现乱码。为什么电子邮件常常出现乱码?就是因为发信人和收信人使用的编码方式不一样。</p>
<p>可以想象,如果有一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。这就是 Unicode,就像它的名字都表示的,这是一种所有符号的编码。</p>
<p>Unicode
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP