unicode and utf-8
今晚听同事分享提到这个,简单总结下。
Unicode字符集
Unicode的出现是因为ASCII等其他编码码不够用了,比如ASCII是英语为母语的人发明的,只要一个字节8位就能够表示26个英文字母了,但是当跨区域进行信息交流的时候,尤其是Internet的出现,除了“A”,“B”,“C",还有“你”,“我”,“他”需要表示,一个字节8位显然不够用,因此Unicode就被发明出来,Unicode的最大码位0x10FFFF,有21位。中文对应的Unicode编码见http://www.chi2ko.com/tool/CJK.htm
UTF-8字符编码
Unicode只是给这世界上每个字符规定了一个统一的二进制编号,并没有规定程序该如何去存储和解析。
可以说UTF-8是Unicode实现方式之一,它的规则如下: 1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。 2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。
| Unicode编码(十六进制) | UTF-8 字节流(二进制) |
| 000000 - 00007F | 0xxxxxxx |
| 000080 - 0007FF | 110xxxxx 10xxxxxx |
| 000800 - 00FFFF | 1110xxxx 10xxxxxx 10xxxxxx |
| 010000 - 10FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
可以看到最多一共有21个x,所以刚好能够表示Unicode的最大的码位。
大端(BE)和小端(LE)
考虑4个字节的16进制表示ox12345678,计算机都是以字节为单位存储数据的,因此内存地址空间从低到高被挖成一个个“坑”,一个萝卜一个坑,那么相邻的萝卜之间自然就有顺序的问题。文字说明太抽象,直接看图理解。

大端跟我们平时的书写习惯一致,比较好理解,记住大端就可以了,我们平时说的网络字节顺序也是指大端,至于小端就让它见鬼去吧。
实在要文字说明理解的话,可以这么来:大端可以认为是“高位在尾端”(大->高),“高位”指的是我们书写时的高位,比如1024,个十百千,1是高位,“尾端”指的是内存空间中低地址一端,所以1存储在低地址空间,只不过计算机是以一个字节为单位的。反之小端就是“低位在尾端”(小->低)了。
BOM
BOM(Byte Order Mark)是用来区分字节序列和编码方式的(UTF-8,UTF-16,UTF-32)。就是让编辑器或程序读到前面几个字节就知道后面该以哪种编码方式来解析,8/16/32是指以多少位作为编码单位的,依次就是1/2/4个字节,因为UTF-8是以单个字节作为编码单位的所以其实没有必要指定它的字节序列,所以UTF-8有BOM和无BOM的两种。
| UTF编码 | Byte Order Mark (BOM) |
| UTF-8 without BOM | 无 |
| UTF-8 with BOM | EF BB BF |
| UTF-16LE | FF FE |
| UTF-16BE | FE FF |
| UTF-32LE | FF FE 00 00 |
| UTF-32BE | 00 00 FE FF |
延伸阅读
Unicode字符平面映射:
unicode and utf-8的更多相关文章
- Unicode和UTF的关系
目录结构: contents structure [+] 什么是USC UCS的编码方式 Unicode的来源 为什么需要Unicode Unicode的方式 Unicode和UTF UTF和Unic ...
- Unicode、UTF-8 和 ISO8859-1
Unicode.UTF-8 和 ISO8859-1到底有什么区别 1.本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等. 在下面的描述中,将以"中文" ...
- ascii、unicode、utf、gb等编码详解
很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们看到8个开关状态是好的,于是他们把这称为"字节".再后来,他们又做了一些可以处理这 ...
- Unicode 与 UTF 字符标准
Unicode 国际字符标准(UCS)是一个字符编码系统,它被设计用来支持世界各国不同语言书面文体之间的数据交换.处理以及显示. Unicode用两个字节表示一个字符.前127个字符与A ...
- Unicode、UTF-8 和 ISO8859-1到底有什么区别
说明:本文转载于新浪博客,旨在方便知识总结.原文地址:http://blog.sina.com.cn/s/blog_673c81990100t1lc.html 本文主要包括以下几个方面:编码基本知识, ...
- Delphi7中Unicode,ANSI,UTF编码问题
注解: ANSI 'American Standard Code for Information Interchange' 美国信息互换标准代码 ANSI的'Ascii'编码 Unicode ...
- ASCII、UNICODE、UTF
在计算机中,一个字节对应8位,每位可以用0或1表示,因此一个字节可以表示256种情况. ascii 美国人用了一个字节中的后7位来表达他们常用的字符,最高位一直是0,这便是ascii码. 因此asci ...
- 转载一篇关于unicode字符编码的文章
很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们认为8个开关状态作为原子单位很好,于是他们把这称为"字节". 再后来,他们又做了一 ...
- 趣谈unicode,ansi,utf-8,unicode big endian这些编码有什么区别(转载)
从头讲讲编码的故事.那么就让我们找个草堆坐下,先抽口烟,看看夜晚天空上的银河,然后想一想要从哪里开始讲起.嗯,也许这样开始比较好…… 很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同 ...
- 字符编码笔记:ASCII,Unicode和UTF-8
很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们看到8个开关状态是好的,于是他们把这称为"字节". 再后来,他们又做了一些可以处理 ...
随机推荐
- 基于FPGA的异步FIFO设计
今天要介绍的异步FIFO,可以有不同的读写时钟,即不同的时钟域.由于异步FIFO没有外部地址端口,因此内部采用读写指针并顺序读写,即先写进FIFO的数据先读取(简称先进先出).这里的读写指针是异步的, ...
- UrlOper
using System; using System.Text.RegularExpressions; using System.Web; using System.Collections.Speci ...
- 基于乐观锁的配置server与XServer的交互
XServer与配置server,配置server保存有XServer的配置文件里的信息. 怎样在项目启动时.让XServer从配置server中获取到自己的配置信息,并达到通信资源的节省与控制. 通 ...
- JIT编译器
深入理解Java Class文件格式(九) http://blog.csdn.net/zhangjg_blog/article/details/22432599 http://blog.csdn.ne ...
- SQL SEREVR IO
Designing High Performance I/O Systems for SQL Server https://sqlbits.com/Downloads/86/Designing%20I ...
- vue2.0 代码功能片段
1.代码片段截取 checkAll: function(flag){ this.checkAllFlag = flag; this.productList.forEach(function(value ...
- Date函数基础知识整理
Date类型:1.Date.parse()接收一个表示日期的字符串参数,然后再根据这个字符串返回响应的日期的毫秒数:如:创建一个日期: <script> // var someDate=n ...
- python2安装pymongo
wget --no-check-certificate https://pypi.python.org/packages/source/p/pymongo/pymongo-2.6.3.tar.gz#m ...
- Eclipse中直接操作本地文件系统
你是不是有时候觉得在Eclipse和windows资源管理器(也就是咱平时用的文件浏览器)之间切换很麻烦? Eclipse中也提供了本地文件系统浏览功能,在里面你也可以方便地进行各种文件操作 在Ecl ...
- 一款纯css3实现的动画加载导航
之前为大家介绍了好几款导航菜单,今天为给大家再带来一款纯css3实现的动画加载导航.该导航出现的时候以动画的形式出现.效果图如下: 在线预览 源码下载 实现的代码. html代码: <ul ...