编码 Unicode utf-8

编码的发展史:

  1. 一开始计算机只在美国使用。8位的字节可以组合出256种不同的状态。他们将0到32种状态规定为”控制码“,后来又用其中32号以后的状态表示空格、标点符号、数字和大小写字母。这样一直编到了127号状态。这样计算机就可以用不同字节来存储英文的文字了。这种指定某个状态为某个动作或者符号的过程称为编码。而以上的方案的编码称为ASNI的ASCII编码(ASCII: American Standard Code for Information Interchange, 美国信息互换标准代码)。当时世界上所有的计算机都是用同样的ASCII方案来保存英文字。
  2. 后来欧洲各地都开始使用计算机,但是很多国家是英用的不文。于是各国人民决定用127号之后的空位来表示新的字母、符号。ASCII从127个扩展到255个。至此,8位的字节所有状态都用了,没有新的状态可以用了。
  3. 等到中国人们得到计算机,已经没有可以利用的字节状态来表示汉字了。更何况中国有6000多个常用汉字需要编码。这个难不倒中国人。我们不客气的将127号之后的奇葩符号直接取消掉,并且规定:一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起是,就表示一个汉字,前面一个字节(即高字节)从0xA1用到0xF7,后面一个字节(低字节)从0xA1到0xFE,这样就可以组合出大约7000多个简体汉字了。其中,还包括数学符号、罗马希腊字母、日本的假名,在ASCII里本来就有的数字、标点、字母都重新编了两个字节长的编码。两个字节长的字符常称为”全角“字符, 而原来127号以下的字符常称为”半角“字符。这种ASCII的汉字扩展方案叫做”GB2313“
  4. 后来中国人还是觉得不够,于是就干脆不要要求低字节一定是要大于127的内码。而规定只要高字节大于127,低字节可以取尽0-255. 结果又增加了近20000个新的汉字和符号。而这种编码方案称为”GBK“,它包含了”GB2312“的所有内容。后来少数民族也用电脑了,于是我们再扩展,GBK扩成了GB18030.
  5. 中国自己扩展了ASCII,其他国家也自己扩展了ASCII。结果是相互之间谁也不懂谁的编码,谁也不支持谁的编码。这样一旦中国要显示印度的文字,就是一片乱码。而且还有那些一时用不上电脑的穷苦人民,他们的文字怎么办?
  6. 百乱之中, ISO(国际标准化组织)着手解决这个问题。他们的方法:废了所有的地区性编码方案,重新搞一个包括地球上所有文化、所有字母和符合的编码。它叫”UNversal Multiple-Octet Coded Character Set“, 俗称”UNICODE“。Unicode开始制订时,计算机的存储器容量已经极大的发展了,空间再也不成问题。于是ISO就直接规定必须用两个字节(16位)来统一表示所有字符。对于ASCII里的前127个字符,Unicode保持其编码不变,只是在其前面加8个零,扩展为16位。而其他文化的语言字符则全部重新统一编码。
  7. Unicode到来了,那么Unicode如何在网络上传输就变成了一个必须解决的问题。于是面向传输的众多标准出现了。其中一种叫做utf-8, 8是指每次传输8位数据。Unicode到utf-8的转变的规则,下面来介绍。

Unicode向utf-8转换的规则:

Unicode utf-8
0000 - 007F 0xxx xxxx  
0080 - 07FF 110x xxxx 10xx xxxx
0800 - FFFF 1110 xxxx 10xx xxxx 10xx xxxx

如上表举例,”汉“字的Unicode编码是6c49,在800-FFFF之间,写成二进制的话是:0110 1100 0100 1001.  将这16位二进制从左到右依次填入1110 xxxx 10xx xxxx 10xx xxxx 的x中, 得到: 1110-0110 10-11 0001 10-00 1001, 即E6 B1 89.

时间: 2025-01-07 15:48:28

编码 Unicode utf-8的相关文章

各个系统和语言对Unicode的支持 字符集和编码——Unicode(UTF&UCS)深度历险

http://www.cnblogs.com/Johness/p/3322445.html 各个系统和语言对Unicode的支持: Windows NT从底层支持Unicode(不幸的是,Windows 98只是小部分支援Unicode).先天即被ANSI束缚的C程序设计语言通过对宽字元集的支持来支持Unicode. Windows底层使用UTF16,Linux使用UTF32(未考证). C#和Java支持UTF16且是默认行为(如字符串天生为UTF16格式字符数组,Java还可以使用'\uxx

各种编码UNICODE、UTF-8、ANSI、ASCII、GB2312、GBK详解

转自:http://blog.csdn.net/lvxiangan/article/details/8151670 GBK,ISO-8859-1,GB2312的本质区别编码有几种 ,计算机最初是在美国等国家发明的 所以表示字符只有简单的几个字母只要对字母进行编码就好 我们标准码 iso-8859-1 这就是一个标准但是后来计算机普及了 于是就中国要使用计算机了 但是机器不认得中文,于是就有了国际码. gbk gb2312都是这类.两个其实一个,一个是标准(发布的代号),一个是简称.后来多了个阿拉

字符编码unicode,utf-8和ascii

Ascii编码 由于计算机是美国人发明的,因此,最早只有127个字符被编码到计算机里,也就是大小写英文字母.数字和一些符号,这个编码表被称为ASCII编码,比如大写字母A的编码是65,小写字母z的编码是122. 但是要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去. 你可以想得到的是,全世界有上百种语言,日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里,各国有各国的标准,就会不可避免地出现冲突,结

彻底搞懂字符编码(unicode,mbcs,utf-8,utf-16,utf-32,big endian,little endian...)[转]

最近有一些朋友常问我一些乱码的问题,和他们交流过程中,发现这个编码的相关知识还真是杂乱不堪,不少人对一些知识理解似乎也有些偏差,网上百度, google的内容,也有不少以讹传讹,根本就是错误的(例如说 unicode编码是两个字节),各种软件让你选择编码的时候,常常是很长的一个选单,让用户不知道该如何选.基于这样的问题,我就写下我的理解吧,一方面帮助一些需要帮助的人纠正认识,一方面作为自己以后备查的资料. 1. ASCII(American Standard Code for Informati

[py]编码 Unicode utf-8

0, utf-8占3个byte Unicode占2个byte,而且较为智能,字符自动占一个字符 anscii占1个byte ? 1,实例 >>>name='马明' #xshell默认存成了utf8 >>>name >>>'\xe9\xa9\xac\xe6\x98\x8e' >>> >>>print '\xe9\xa9\xac\xe6\x98\x8e' #可以直接打印utf8 >>>马明 >&g

各种编码UNICODE、UTF-8、ASCII学习笔记

作者: 阮一峰 日期: 2007年10月28日 今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料. 结果,这个问题比我想象的复杂,从午饭后一直看到晚上9点,才算初步搞清楚. 下面就是我的笔记,主要用来整理自己的思路.但是,我尽量试图写得通俗易懂,希望能对其他朋友有用.毕竟,字符编码是计算机技术的基石,想要熟练使用计算机,就必须懂得一点字符编码的知识. 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)

一句话理解字符编码(Unicode ,UTF8,UTF16)

Unicode和ASCII码属于同一级别的,都是字符集,字符集规定从1到这个字符集的最大范围每个序号都各表示什么意思.比如ASCII字符集中序号65表示"A". 那接下来的UTF8和UTF16就相当于我们在计算机中怎么表示这个序号了.这就好比,通常情况下我们用十进制表示数字(1表示一个,2表示两个).但是有时候我们也会根据情况用二进制,八进制,十六进制表示. UTF8编码规则表示一个序号可能用一个字节/两个字节/三个字节来表示.UTF16编码规则表示一个序号只会用两个字节表示.其他的编

字符串和字符编码unicode

python基础第三天 字符串 str 作用: 用来记录文本(文字)信息,给人类识别用的,为人们提供注释解释说明 表示方式: 在非注释中,凡是用引号括起来的部分都是字符串 ' 单引号 " 双引号 ''' 三单引号 """ 三双引号 空字符串的字面值表示方法 '' "" ''' """ 单引号和双引号的区别: 单引号的内的双引号不算结束符 双引号的内的单引号不算结束符 扩展:因为解释执行器根据单引号为开始符往后找单引号

Unicode, UTF, ASCII, ANSI format differences

Going down your list: "Unicode" isn't an encoding, although unfortunately, a lot of documentation imprecisely uses it to refer to whichever Unicode encoding that particular system uses by default. On Windows and Java, this often means UTF-16; in