unicode 与 utf-8

摘要:
Unicode旨在统一编码所有字符。unicode的UCS2标准使用两个字集和16位来表示字符,因此其容量为216。因此,可变长度编码UTF再次出现。它是专门为传输而设计的。Utf-8表示8位编码格式,以及uft-16和Utf-32。unicode和uft-8之间的转换关系。当unicode代码为utf-8时,规则如下:对于0-127之间的代码,它由一个字节表示,即二进制代码。utf-8的十六进制值为e4b8ad。javascript中的Unicode和utf-8js中的转义以Unicode编码字符,而encodeURI和encodeURIComponent以utf-8编码字符。

unicode

计算机的世界是二进制的世界,无论文字音频传输存储之时都要落实到二进制上。而起源于西方的计算机技术自然深根于他们的文化,于是最初的ascii码基本只是西方的文字编码集。随着计算机的普及,各个国家各个民族基本都为自己的文字创立了字符集。多而杂的规则为数据的传输交换带来巨大困难。是时候要统一字符集了。

unicode应运而生。unicode旨在为所有字符统一编码。

unicode的UCS2标准用两个字集,16位来表示字符,因此它的容量是216个。

uft-8

在大家都使用unicode的时候,英文字母和符号由原本ascii下的一个字节变成两个字节,这无疑是一种浪费。于是UTF(unicode transfer format)这种变长编码又出现了,它专门为传输而设计。unicode相当一个map,为每个字符赋一个编码。而utf则对这些编码再次编码,以便于传输存储。utf-8表示8位的编码格式,还有uft-16,utf-32。

unicode与uft-8之间的转换关系

unicode编码为utf-8时规则如下:

  • 对于0-127之间的编码,以一个字节表示,即其二进制编码。
  • 128及以上,如果编码后的uft-8是n个字节,则第一个字节的编码起始为连续的n个1和一个0,后续字节皆以10开头,剩余部分才是存放真实值的地方,这里说的n个1+0 和 10就像是来描述协议的暗号一样。
unicode 编码范围(binary)uft-8(binary)
0~0111 11110xxx xxxx
0000 1000 0000 ~ 0111 1111 1111110x xxxx 10xx xxxx
0000 1000 0000 0000 ~ 0111 1111 1111 11111110 xxxx 10xx xxx 10xx xxxx

utf-8以八个字节为一个单位编码,其中字节符合 ^1{2,}0 规则的是开始字节,一个开始字节后面跟的随1-6个辅助字节,每个辅助字节以10开头,所以可以承载的信息是6位。那么我们可以轻易计算出utf-8各个变长编码组的容量范围:

  1. 一个n个字集编码的 utf-8 的有效位是 (8-n-1)+n*6,得出上限值M。
    2.用1的方式计算出 n-1 个字集编码表达的上限N。

所以n个utf-8字节编码表达的unicode值范围是,N+1~M。经计算:

utf-8 字节数(dec)编码值范围(dec)
10-127
2128-2047
32048-65535
465536-2097151

举一个例子来描述这种转换规则:

汉字“中”的unicode编码十六进制数为:4e2d,十进制为:20013, 二进制为:0100 1110 0010 1101,区间在2048-65535,所以是三个字节。
所以将其二进制填充进 1110 xxxx 10xx xxx 10xx xxxx的x中,得出的结果是1110 0100,1011 1000,1010 1101。得出utf-8十六进制为 e4 b8 ad。

javascript中的unicode和utf-8

js中escape是对字符进行unicode编码,而encodeURI和encodeURIComponent是utf-8编码。

免责声明:文章转载自《unicode 与 utf-8》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇gulp插件的使用方法Html之img标签下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

java中String编码转换 UTF-8转GBK

1.GB2312等都可以用GBK代替.2.new String(row.getBytes("GB2312"), "UTF8") 这种写法是不对的, 中文仍然会乱码. 方案:解决GBK字符转UTF-8乱码问题: https://www.cnblogs.com/xijin-wu/p/5884822.html 彻底搞懂编码 GBK 和 UTF8:https:/...

【转】二维码生成原理

原文链接:QR码生成原理-QR Code(ISO 18004)编码方式 一、什么是QR码 QR码属于矩阵式二维码中的一个种类,由DENSO(日本电装)公司开发,由JIS和ISO将其标准化。QR码的样子其实在很多场合已经能够被看到了,我这还是贴个图展示一下: 这个图如果被正确解码,应该看到我的名字和邮箱。 二、QR码的特点 说到QR码的特点: 一是高速读取...

FlexCell图片显示问题

1、  在FlexCell设计器中,添加图片,导出xml 可以看到  图片不大于20k显示:(20KB为不准确的数字)     图1 图片大于20k显示:(20KB为不准确的数字) 图2 图片转换为一串字符串,是Base64编码格式的 2、  所以flexcell图片显示问题思路是: 1)上传图片同时,转换为以base64编码格式的字符串; 显示时,按1...

Python基础字符编码与转码

***了解计算机的底层原理*** Python全栈开发之Python基础-字符编码与转码 需知: 1.在python2默认编码是ASCII, python3里默认是utf-8 2.unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so utf-8就是unicode 3.在py3中encode,在转...

C#.NET 中的类型转换

C# 出来也有些日子了,最近由于编程的需要,对 C# 的类型转换做了一些研究,其内容涉及 C# 的装箱/拆箱/别名、数值类型间相互转换、字符的 ASCII 码和 Unicode 码、数值字符串和数值之间的转换、字符串和字符数组/字节数组之间的转换、各种数值类型和字节数组之间的转换、十六进制数输出以及日期型数据的一些转换处理,在这里与大家分享—— 1. 装箱...

Unity资源Assetbundle

转  Unity资源打包之Assetbundle 本文原创版权归 csdn janeky 所有,转载请详细注明原创作者及出处,以示尊重! 作者:janeky 原文:http://blog.csdn.net/janeky/article/details/17652021 如果这篇文章对你有帮助,敬请关注作者《Unity手游之路》系列教程。 在手游的运营过程中...