字符编码UTF-8 unicode编码

在计算机中,我们储存的信息都是用二进制码表示的。我们认识的、屏幕上显示的英文、汉字等符号和储存用的二进制代码的互相转换,就是编码。

有两个基本概念需要说明,charset 和 characterencoding:

charset ,字符集,也就是某个符号和某个数字映射关系的一个表,也就是它决定了107 是koubei的 ‘a’,21475 是口碑的“口”,不同的表有不同的映射关系,如 ascii,gb2312,Unicode. 通过这个数字和字符的映射表,我们可以把一个二进制表示的数字转换成某个字符。

chracter encoding ,编码方式。例如,同是对于应“口”的 21475 这个数,我们是用 u5k3e3表示呢,还是用口来表示呢?这就是由 characterencoding 来决定的。

字符集

ASCII及其扩展字符集

作用:表语英语及西欧语言。

位数:ASCII是用7位表示的,能表示128个字符;其扩展使用8位表示,表示256个字符。

范围:ASCII从00到7F,扩展从00到FF。

ISO-8859-1字符集

作用:扩展ASCII,表示西欧、希腊语等。

位数:8位,

范围:从00到FF,兼容ASCII字符集。

GB2312字符集

作用:国家简体中文字符集,兼容ASCII。

位数:使用2个字节表示,能表示7445个符号,包括6763个汉字,几乎覆盖所有高频率汉字。

范围:高字节从A1到F7, 低字节从A1到FE。将高字节和低字节分别加上0XA0即可得到编码。

BIG5字符集

作用:统一繁体字编码。

位数:使用2个字节表示,表示13053个汉字。

范围:高字节从A1到F9,低字节从40到7E,A1到FE。

GBK字符集

作用:它是GB2312的扩展,加入对繁体字的支持,兼容GB2312。

位数:使用2个字节表示,可表示21886个字符。

范围:高字节从81到FE,低字节从40到FE。

GB18030字符集

作用:它解决了中文、日文、朝鲜语等的编码,兼容GBK。

位数:它采用变字节表示(1ASCII,2,4字节)。可表示27484个文字。

字符编码UTF-8 unicode编码

范围:1字节从00到7F; 2字节高字节从81到FE,低字节从40到7E和80到FE;4字节第一三字节从81到FE,第二四字节从30到39。

UCS字符集

作用:国际标准 ISO 10646定义了通用字符集(UniversalCharacter Set)。它是与UNICODE同类的组织,UCS-2和UNICODE兼容。

位数:它有UCS-2和UCS-4两种格式,分别是2字节和4字节。

范围:目前,UCS-4只是在UCS-2前面加了0×0000。

UNICODE字符集

作用:为世界650种语言进行统一编码,兼容ISO-8859-1。

位数:UNICODE字符集有多个编码方式,分别是UTF-8,UTF-16和UTF-32。

现在使用最广泛 Unicode的编码方式就是 UTF-8 (8-bitUCS/Unicode Transformation Format) 了,最大的特点就是是一种变长编码方式(variable-length character encoding),根据不同符号变化字节长度,兼容ascii,使得以前使用纯ascii 编码的系统兼容,而且不会增加额外的存储量(假设定长的编码方式,规定每个字符由2个bytes 组成,那么这时候 ascii字符占用的存储空间将增大一倍)。

要把 UTF-8说清楚,引入一个表会更方便了:

U-00000000 –U-0000007F:0xxxxxxx

U-00000080 –U-000007FF:110xxxxx 10xxxxxx

U-00000800 –U-0000FFFF:1110xxxx 10xxxxxx 10xxxxxx

U-00010000 –U-001FFFFF:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

U-00200000 –U-03FFFFFF:111110xx 10xxxxxx 10xxxxxx 10xxxxxx10xxxxxx

U-04000000 –U-7FFFFFFF:1111110x 10xxxxxx 10xxxxxx 10xxxxxx10xxxxxx 10xxxxxx

如果一个utf-8编码的byte 的二进制码是0xxxxxxx,是0开头的,即十进制的0-127之间,那么他就是单独的这一byte 代表一个字符,而且是拥有和 ascii 码完全一样的含义。其他所有的utf8 编码的二进制值都是用1开头的1xxxxxxx,大于127的,而且都需要至少2 bytes才能代表一个符号。所以一个字节的第一位是一个开关,代表这个字符是不是一个ascii 码。在以上编码中一个非ascii符号可用UTF-8的2~6个bytes来表示,其中第一个byte开始部分连续1的个数标志该符号使用的bytes数,后面bytes均使用10开头

编码识别

UNICODE,根据前几个字节可以判断UNICODE字符集的各种编码,叫做Byte Order Mask方法BOM:

UTF-8: EFBBBF (符合UTF-8格式,请看上面。但没有含义在UCS即UNICODE中)

UTF-16 Big Endian:FEFF (没有含义在UCS-2中)

UTF-16 Little Endian:FFFE (没有含义在UCS-2中)

UTF-32 Big Endian:0000FEFF (没有含义在UCS-4中)

UTF-32 Little Endian:FFFE0000 (没有含义在UCS-4中)

GB2312:高字节和低字节的第1位都是1。

BIG5,GBK&GB18030:高字节的第1位为1。操作系统有默认的编码,常为GBK,可以下载别的并升级。通过判断高字节的第1位从而知道是ASCII或者汉字编码。

  

爱华网本文地址 » http://www.413yy.cn/a/25101015/260327.html

更多阅读

decode函数的其他参数 decode函数

在工作中,经常遇到,读取一个文件,或者是从网页获取一个问题,明明看着是gb2312的编码,可是当使用decode转时,总是出错,这个时候,可以使用decode(‘gb18030′)这个字符集来解决,如果还是有问题,这个时候,一定要注意,decode还有一个参数,比如,若要将

js中文乱码怎么解决 js添加空格

2011-06-06 15:20①.js 文件中文显示乱码Javascript文件XX.js编辑保存时有一种编码方案(如GBK),当打开文件的时候所用的编码(如UTF-8)和保存时的编码方案不一致时,则会出现中文显示乱码。解决方案:(1) 用编辑器打开浏览的时候,选择和原文件

C语言在K叉哈夫曼编码教学中的应用 c语言哈夫曼编码译码

摘 要:字符编码与信息压缩是计算机应用的重要研究课题,许多学者对此作了很多非常有价值的研究。文章简单分析了二叉哈夫曼树的构造及编码,通过比较三种构造三叉哈夫曼树的算法,提出了构造任意K叉哈夫曼树及K进制的最优前缀编码的算法,并

解决SSH Secure Shell Client中文乱码问题 ssh secure shell

一直使用SSH Secure Shell Client,该软件是免费的SSH远程登录软件。缺点是使用本地编码,比如windows是GBK,那么登录就是通过GBK连接,这样如果服务器编码是UTF-8,会产生中文乱码,比如:当需要阅读中文信息的时候就很麻烦。因为现在越来越多的

声明:《字符编码UTF-8 unicode编码》为网友青丘白浅分享!如侵犯到您的合法权益请联系我们删除