unicode 编码总结
unicode简介:
unicode又称为unicode character set,缩写为ucs,意为字符集。编码方式有utf-7,utf-8,utf-16,utf-32几种,常用的是utf-8和utf-16。utf-8常用于web中,utf-16是windows和java采用的编码方式。通常我们说unicode就是指utf-16。
本文主要讲讲utf-16和utf-8。
utf-16:
utf-16同时也称为ucs-2编码,采用两个字节表示。最多可表示2^16=65536个符号。我们知道ascii码用一个字节即可表示全部的英文字母,因此对于英文而言,utf-16稍显浪费。
utf-8:
utf-8是一种变长unicode编码,用1至4个字节表示。对于英文而言,用一个字节表示即可,此时utf-8编码与ascii编码是一模一样的。
utf-16 be和utf-16 le:
be即big-endian,意味按高位到低位的顺序存储,那么le(little-endian)就是按低位到高位的顺序存储了。如果打开一个utf-16编码的文件最先出现的是feff,则表明是用be方式存储的。如果出现的是fffe则为le方式存储。
bom:
在utf-16 be中用16进制表示为feff,转换为二进制是11111110 11111111(左侧为高位,右侧为低位)。在utf-16 le中用16进制表现为fffe, 因此bom的存在就是为了区分文件是用be方式还是le方式存储的。
在utf-8 be中bom用16进制表示为ef bb bf。
unicode转化为utf-8:
utf-8的编码规则很简单,只有二条:
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的ascii码。因此对于英语字母,utf-8编码和ascii码是相同的。
2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。
Unicode符号范围 | utf-8
(十六进制) |(二进制)
-------------------------+--------------------------------------
0000 0000 - 0000 007F | 0xxxxxxx
0000 0080 - 0000 07FF | 110xxxxx 10xxxxxx
0000 0800 - 0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000 - 0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
找到unicode符号对应的utf-8区间,将unicode符号转换为二进制,最后一个二进制位开始,依次从后向前填入utf-8格式中的x,多出的位补0。
示例:
将utf-16 bom转换为utf-8 bom,即将0xfeff转换为utf-8 bom。
一)unicode编码feff所在的范围为0000 0800 - 0000 FFFF,因此其utf-8模板为1110xxxx 10xxxxxx 10xxxxxx,占用3个字节。
二)0x feff = 0b 1111 111011 111111,这里我是用python计算出来的,bin(0xfeff)
三)从最后一个二进制位开始,依次将每位填入utf-8模板中,多出位补0,得11101111 10111011 10111111,转换为16进制为ef bb bf,用python计算hex(0b111011111011101110111111)可得
参考文章:
1.字符编码笔记:ASCII,Unicode和UTF-8 http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html
2.程序员趣味读物:谈谈Unicode编码 http://www.pconline.com.cn/pcedu/empolder/gj/other/0505/616631.html
unicode 编码总结的更多相关文章
- SQL Server 中怎么查看一个字母的ascii编码或者Unicode编码
参考文章:微信公众号文章 在sql中怎么查看一个字符的ascii编码,so easy !! select ASCII('a') SELECT CHAR(97) charNum SELECT UNICO ...
- JS操作Unicode编码的emoji表情显示在页面
前言:项目中用到了emoji表情,后端传递数据时直接是以Unicode形式,在页面总是无法展示,找尽各种方法总算是试出了一种,虽然达到效果但是并不是特别理解其中的原理并且无比笨拙,贴在这用作笔记,如果 ...
- [转]程序员趣味读物:谈谈Unicode编码
from : http://pcedu.pconline.com.cn/empolder/gj/other/0505/616631_all.html#content_page_1 这是一篇程序员写给程 ...
- java中文乱码解决之道(三)-----编码详情:伟大的创想---Unicode编码
随着计算机的发展.普及,世界各国为了适应本国的语言和字符都会自己设计一套自己的编码风格,正是由于这种乱,导致存在很多种编码方式,以至于同一个二进制数字可能会被解释成不同的符号.为了解决这种不兼容的问题 ...
- Unicode编码解码在线转换工具
// Unicode编码解码在线转换工具 Unicode 是基于通用字符集(Universal Character Set)的标准来发展,并且同时也以书本的形式(The Unicode Standar ...
- .Net(c#)汉字和Unicode编码互相转换
{"Tilte": "\u535a\u5ba2\u56ed", "Href": "http://www.cnblogs.com&q ...
- 转载:谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词
转载: 谈谈Unicode编码,简要解释UCS.UTF.BMP.BOM等名词 这是一篇程序员写给程序员的趣味读物.所谓趣味是指可以比较轻松地了解一些原来不清楚的概念,增进知识,类似于打RPG游戏的升级 ...
- unicode编码与utf-8 区别
unicode编码与utf-8 区别 如果是为了跨平台兼容性,只需要知道,在 Windows 记事本的语境中: 所谓的「ANSI」指的是对应当前系统 locale 的遗留(legacy)编码.[1] ...
- 中文字符串转换为十六进制Unicode编码字符串
package my.unicode; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Uni ...
- C# Unicode编码
为了避免在浏览器中传输数据的时候出现中文乱码,我们可以将内容进行URL编码,当然也可以将内容进行UNICODE编码.将汉字进行UNICODE编码,如:"王"编码后就成了" ...
随机推荐
- MySQL join的实现原理及优化思路
Join 的实现原理 在MySQL 中,只有一种Join 算法,也就是Nested Loop Join,没有其他很多数据库所提供的Hash Join,也没有Sort Merge Join.顾名思义,N ...
- POJ 1001 Exponentiation
题意:求c的n次幂……要求保留所有小数…… 解法:一开始只知道有BigInteger……java大数+模拟.第一次写java大数……各种报错各种exception……ORZ 没有前导0和小数后面的补位 ...
- codeforces 676D Theseus and labyrinth BFS搜索
分析:一个n*m的矩阵,每个格子有12个状态,每次按一次,每个格子转90度,所以整个矩阵只有4种状态,然后爆搜就好了 #include <cstdio> #include <iost ...
- 通过chrome识别手机端app元素--Chrome:inspector
现实中应该有这样一种情况,就是一个app只支持手机端使用,同时他又是hybrid的,那么其中的webview部分的元素属性如何去获得呢? 使用下面的方法可以解决这个问题: 调试 Android Chr ...
- 单元测试工具之Xunit
在.NET开发中的单元测试工具之——xUnit.Net 原始出处 http://zhoufoxcn.blog.51cto.com/792419/1172320 在上一篇<在.NET开发中的单元 ...
- 第一个GTK+程序
在这一章节中,我们将开始编写第一个GTK+程序. 超级简单的例子 我们要“制造”一个超级简单的GTK+程序.就是显示一个空白的窗口. #include <gtk/gtk.h> int ma ...
- MFC菜单、工具栏和状态栏
菜单:CMenu类 CMenu类的主要成员函数 BOOL LoadMenu(UINT nIDResource); 加载菜单资源,并将其附加到CMenu对象上.参数nIDResource指定了要加载的菜 ...
- bzoj 3932 [CQOI2015]任务查询系统(主席树)
Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分. 超级计算机中的任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si ...
- SQL Server 用表中已有数据造数据
从表中选择数据再插入到表中(select XXX into 与insert into XXX select的结合) 在做性能测试时需要大量的业务数据.完全从画面造数据比较费时间,使用SQL文批量插入数 ...
- The usage method of reference with bibtex in Latex【latex中参考文献的使用方法】
如何在latex中以Bibtex文件方式引用参考文献? 以IEEEtran模板为例: 1.制作bibtex参考文献库.方法如下: ①建立myreference.bib文件: ②在Google scho ...