unicode 与 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编码。

转载于:https://www.cnblogs.com/magma/p/5769929.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/418171.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线程通信的经典问题:生产者消费者问题

package ThreadTest2; // 线程通信的经典问题&#xff1a;生产者消费者//店员&#xff08;资源&#xff09; class Clerk{private int productCount 0 ;public synchronized void produceProduct() {if(productCount < 100 ) {productCount;System.out.println(Thread.curr…

ServiceStack学习之一准备工作

GitHub&#xff1a;https://github.com/ServiceStack/ServiceStack/wiki 官网介绍的前期准备知识&#xff1a; Wikipedia article about HTTP and HTTP verbs HTTP status codesHTTP headers REST wikipedia article SOAP wikipedia articleSearch一下&#xff0c;以下博客讲的…

2013-2014 ACM-ICPC, NEERC, Southern Subregional Contest Problem C. Equivalent Cards 计算几何

Problem C. Equivalent Cards题目连接&#xff1a; http://www.codeforces.com/gym/100253 Description Jane is playing a game with her friends. They have a deck of round cards of radius 100. Each card has a set of disjoint rectangles strictly within the bounding…

String类中不同拼接方式

有变量名参与都不是在常量池中了&#xff0c;类似于new

使用JMeter创建数据库(Mysql)测试

我的环境&#xff1a;MySQL&#xff1a;mysql-essential-5.1.51-win32 jdbc驱动&#xff1a;我已经上传到csdn上一个&#xff1a;http://download.csdn.net/source/3451945 JMeter&#xff1a;jmeter-2.4 任意版本都行。 1.首先我们要有一个可以做测试的数据库&#xff0c;当然…

dtrace

http://dtrace.org/guide/bookinfo.html转载于:https://www.cnblogs.com/WCFGROUP/p/5786990.html

[转载]如何判断js中的数据类型

原文地址&#xff1a;如何判断js中的数据类型作者&#xff1a;最初的你如何判断js中的数据类型&#xff1a;typeof、instanceof、 constructor、 prototype方法比较 如何判断js中的类型呢&#xff0c;先举几个例子&#xff1a; var a "iamstring."; var b 222; var…

String类与其他数据类型得转换

一&#xff1a;与基本数据类型或者包装类 二、String与char型数组得转换 三、String类与字节数组byte[]之间的转换 输出的是字符中得ASCII码。 getBytes使用的默认得编码集 可以自主设置编码集否则为默认编码集 输出&#xff1a;

字符串类中的StringBuffer,StringBuilder

StringBuffer类的常用方法 &#xff0c; String StringBuffer,StringBuilder的效率

JS练习题

输入整数a和b,若a2b2大于100,则输出a2b2百位以上数字,否则输出两数之和<br /><input type"text" id"a" /><br /><input type"text" id"b" /><br /><input type"button" value"点击&q…

JAVA日期和时间API

JDK8以前&#xff1a; public void test2() { // 构造器1&#xff1a;Date date1 new Date();System.out.println(date1); // date1.toString// 构造器2&#xff1a;创建指定毫秒数的Date对象Date date2 new Date(1631722133700L);System.out.println(date2);} JDK8以后: …

Calender日历类

使用方法&#xff1a; Testpublic void test() { // 调用其静态方法得到一个对象Calendar calendar Calendar.getInstance();System.out.println(calendar.getClass()); // 输出的为 GregorianCalendar类// get() 得到所需的数据 比如这一年的第几天int days calendar.…

php-fpm优化

PHP-FPM是一个PHPFastCGI进程管理器&#xff0c;是只用于PHP的。 PHP-FPM其实是PHP源代码的一个补丁&#xff0c;旨在将FastCGI进程管理整合进PHP包中。必须将它patch到你的PHP源代码中&#xff0c;在编译安装PHP后才可以使用。 现在我们可以在最新的PHP 5.3.2的源码…

JDK8后的日期时间API

Testpublic void test() { // now() 获取当前的时间&#xff0c;日期LocalDate ld LocalDate.now();LocalTime lt LocalTime.now();LocalDateTime ldt LocalDateTime.now();System.out.println(ld);System.out.println(lt);System.out.println(ldt);// of():指定年月日 …

送花(洛谷 2073)

题目背景 小明准备给小红送一束花&#xff0c;以表达他对小红的爱意。他在花店看中了一些花&#xff0c;准备用它们包成花束。 题目描述 这些花都很漂亮&#xff0c;每朵花有一个美丽值W&#xff0c;价格为C。 小明一开始有一个空的花束&#xff0c;他不断地向里面添加花。他有…

nfs服务搭建

service nfs restart nfs服务重启 showmount -e ip地址 查看服务开启状态&#xff1a; chkconfig --list nfs 服务配置&#xff1a; #vim /etc/exports /data/ 192.168.1.145/24(rw,sync) /data/ *(rw,sync,all_squash) 服务重载&#xff0c;不需要restart #/etc/init.d…