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编码,如:"王"编码后就成了" ...
随机推荐
- NET下RabbitMQ实践[WCF发布篇]
在之前的两篇文章中,主要介绍了RabbitMQ环境配置,简单示例的编写.今天将会介绍如何使用WCF将RabbitMQ列队以服务的方式进行发布. 注:因为RabbitMQ的官方.net ...
- SQL Server 外键约束的例子
外键约束的测试表与测试数据 -- 创建测试主表. ID 是主键. CREATE TABLE test_main ( id INT, value ), PRIMARY KEY(id) ); -- 创建测 ...
- 【工具类】如何通过代码安装一个apk文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
- python运算符的优先级
运算符优先级 如果你有一个如2 + 3 * 4那样的表达式,是先做加法呢,还是先做乘法?我们的中学数学告诉我们应当先做乘法——这意味着乘法运算符的优先级高于加法运算符. 下面这个表给出Python的运 ...
- 黑盒测试用例设计方法&理论结合实际 -> 场景法
一概念 现在的软件几乎都是用事件触发来控制流程的,事件触发时的情景便形成了场景,而同一事件不同的触发顺序和处理结果就形成事件流.这种在软件设计方面的思想也可以引入到软件测试中,可以比较生动地描绘出事件 ...
- hive的使用和深化理解
1.hive中的数据最终是存放在hdfs上的 2.hive本身不是关系型数据库,hive执行sql语句时会把sql语句翻译成mapreduce程序,然后将mapreduce程序提交到hadoop集群中 ...
- 浅谈reverse_iterator的base()函数
非原创,原文链接:http://blog.csdn.net/shuchao/article/details/3705252 调用reverse_iterator的base成员函数可以产生"对 ...
- 分享一个安卓中异步获取网络图片并自适应大小的第三方程序(来自github)
安卓中获取网络图片,生成缓存 用安卓手机,因为手机流量的限制,所以我们在做应用时,要尽量为用户考虑,尽量少耗点用户的流量,而在应用中网络图片的显示无疑是消耗流量最大的,所以我们可以采取压缩图片或者将图 ...
- uva 11997 K Smallest Sums 优先队列处理多路归并问题
题意:K个数组每组K个值,每次从一组中选一个,共K^k种,问前K个小的. 思路:优先队列处理多路归并,每个状态含有K个元素.详见刘汝佳算法指南. #include<iostream> #i ...
- 稀疏表示(sparse representation)和字典学习
近十几年来,稀疏(sparsity)已经成为信号处理及其应用领域中处于第一位的概念之一.近来,研究人员又致力于过完备(overcomplete)信号表示的研究.这种表示不同于许多传统的表示.因为它能提 ...