翻译自http://www.pixelstech.net/article/1397877200-You-know-what-UTF-8-is-when-you-see-it-

Source : sonic0002

如有版权问题请告知.

在编码的时候我们经常会看到UTF-8, GB 2312之类的字样. 可你真的了解这些编码的意义吗? 我们为什么需要这些编码呢? 在这篇文章里,  Julián
Solórzano
将会给我们介绍世界上使用范围最广/包含所有不同字符集的编码规则.

UTF-8是一种Unicode字符的编码方式, 它使用8个bit. Unicode是一种用来对不同语言中大多数字符进行编码的标准.

大约40年前, ASCII诞生了. 原始的ASCII包含128个字符, 包括大小写英文, 数字和标点符号, 每个字符使用7个bit编码.

随后出现了"拓展ASCII", 它使用8个bit来包含更多的字符, 比如 á, é, ü. 对于这额外的128个字符空位, 出现了许多不同的代码映射集. 比如latin1, windows-1252等等(对于这128个额外字符, 没有固定的对应表, 取决于种族语言和操作系统等).

很明显128(7bit)或256(8bit)个字符空位对于同时代表众多字符都是不够的. 因此Unicode作为一个可以代表几乎所有文字系统的标准被提出了. 目前它包含超过1000,000个字符(code point). UTF-8 是一种用来编码这些字符的方式. 在UTF-8中的一个字符可以由1个或更多字节(byte)组成. 前128个字符和ASCII码是一样的. 之后的字符就使用超过1个字节来进行编码. 一个独立字符中的每个字节都以一个特殊的位顺序开头来表示此字节和前一个字节描述的是同一个字符.

Table from Wikipedia:

比如, á是一个Unicode字符编码,
U+00E1, 或者 225(十进制)

225的二进制是11100001.

因为需要8个bit来表示这个数字(225), 因此在UTF-8中我们需要使用2个字节来对它进行编码(原ASCII表中的前128个字符才使用1个字节, 它们只用7个bit). 所以, 使用第一张表作为参考, 我们可以把这个字符编码成:

11000011
10100001

粗体部分是数字225,
非粗体的是编码必须的模式.

因此,
如果你打开了一个包含字节c3 a1的文本文件, 并且程序认为编码格式是UTF-8, 你就会看到
á.

[翻译]你真的知道你看到的UTF-8字符是什么吗?的更多相关文章

  1. man rsync翻译(rsync命令中文手册)

    本文为命令rsync的man文档翻译,几乎所有的选项都翻译了,另外关于筛选规则部分只翻译了一部分.由于原文很多地方都比较啰嗦,所以译文中有些内容可能容易让国人疑惑,所以我个人在某些地方加上了注释.若有 ...

  2. python3 实现对代码文件中注释的翻译

    心血来潮,昨天看见群里讨论一段图片转pdf的代码,直接拿过来发现不能用,原来是因为代码中传的文件对象不对,源码中说传递的是一个文件路径或一个文件对象.他传的是一个文件名,很是尴尬. 想了想,主要原因还 ...

  3. 为什么AI的翻译水平还远不能和人类相比?

    为什么AI的翻译水平还远不能和人类相比? https://mp.weixin.qq.com/s/0koIt-qu9IOVxNhbFcZr1Q 作者 | SHARON ZHOU 译者 | 王天宇 编辑 ...

  4. hdu 1075:What Are You Talking About(字典树,经典题,字典翻译)

    What Are You Talking About Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 102400/204800 K ...

  5. 利用有道翻译Api实现英文翻译功能

    有道翻译提供了翻译和查词的数据接口.通过数据接口,您可以获得一段文本的翻译结果或者查词结果.       通过调用有道翻译API数据接口,您可以在您的网站或应用中更灵活地定制翻译和查词功能. 第一步: ...

  6. 1.【使用EF Code-First方式和Fluent API来探讨EF中的关系】

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/relationship-in-entity-framework-using-code-firs ...

  7. JavaScript和JQuery好书推荐

    其实无论你是php/python/java还是c/c++,只会自己那点知识是无法独立完成一个站点的建设的! 如果你因自己能力不足拒绝过几次亲友的建站请求,或者因合作中不了解前端是什么东西而失去过几次创 ...

  8. being词典案例分析

    一.调研评测: 1.软件bug: 1.输入空格分号回车之后并不给用户报错,说明他的异常处理机制有问题. 2.对于中文的很多口头语和方言,并不能给出翻译或者说,也并没有给出网络搜索后的结果. 3.添加生 ...

  9. python字符编码(二)

    一.什么是字符编码 计算机要想工作必须通电,也就是说‘电’驱使计算机干活,而‘电’的特性,就是高低电压(高低压即二进制数1,低电压即二进制数0),也就是说计算机只认识数字 编程的目的是让计算机干活,而 ...

随机推荐

  1. (转)扩展jquery easyui datagrid 之动态绑定列和数据

    本文转载自:http://blog.csdn.net/littlewolf766/article/details/7336550 easyui datagrid 不支持动态加载列,上次使用的方法是自己 ...

  2. 三星电视删除USB播放记录

    当使用三星UA40系列电视机播放USB设备中的文件后,会将播放的历史记录存储在电视里.如果想要清除这些播放记录,需要将电视机复位,操作方法如下: 这里提醒您:复位后电视的所有设置都将恢复为出厂默认设置 ...

  3. Android中的布局优化方法

    http://blog.csdn.net/rwecho/article/details/8951009 Android开发中的布局很重要吗?那是当然.一切的显示样式都是由这个布局决定的,你说能不重要吗 ...

  4. 在mac上安装svn客户端

    mac 10.8上面,默认是没有svn客户端的,可以通过以下两种方式来安装:    1.单独安装xcode命令行工具,安装完成后,在终端中就可以使用svn命令了,目前版本是1.6.18:    2.去 ...

  5. ServletContext(重要)

    一个项目只有一个ServletContext对象! 我们可以在N多个Servlet中来获取这个唯一的对象,使用它可以给多个Servlet传递数据! 这个对象在Tomcat启动时就创建,在Tomcat关 ...

  6. Service代码示例

    package com.homily.training.service; import android.app.Service; import android.content.Intent; impo ...

  7. sqlite数据库执行full outer join

    sqlite数据库执行full outer join时提示:RIGHT and FULL OUTER JOINs are not currently supported. sqlite数据库不支持(+ ...

  8. Form_Form Builder Export导出为Excel(案例)

    2014-01-09 Created By BaoXinjian  

  9. OAF_架构MVC系列4 - Control的概述(概念)

    2014-06-18 Created By BaoXinjian

  10. python 解析json

    一.概念 序列化(Serialization):将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON.XML等.反序列化就是从存储区域(JSON,XML)读取反序列化对象的 ...