UTF-8和UTF-16简介
首先介绍unicode,最开始计划有31位,但到后来一执行,发现0x 0~10FFFF就够用了,仅有21位。
UTF-8是一种变长、多字节编码方案,从一字节模式,到六字节模式。虽然unicode只到21位,但是查看pcre2的源代码发现,对UTF-8的支持到六字节。
0*******
110***** 10******
1110**** 10****** 10******
11110*** 10****** 10****** 10******
这里仅罗列到四字节模式。
分析一个UTF-8编码的文件,看第一个字节是否是0开头的,如果是,就是一字节模式,该模式兼容基本ASCII码,也是128个码位。
如果第一字节以110开头,则使用双字节模式,接下来的那个字节以10开头。
如果是1110开头则是三字节模式,如果是11110开头则是四字节模式。
UTF-16有双字节模式、四字节模式两种。
******** ********
110110** ******** 110111** ********
有人会发现,双字节模式下,遍历了16比特的全部65536种情况,那该怎样区分双字节模式和四字节模式呢?
原来,设计unicode时早有安排,编码110110-- --------对应的1024个码位留空。因为有10个星号,所以是1024个码位。同理,编码110111-- --------对应的1024个码位也为空。共有2048个码位留空,专门为了UTF-16能正常工作。
即使这样,四字节模式的UTF-16也只有20个星号啊,可unicode最多有21位,还差1位呢?
算法是这样的:
设待编码为U,当0≤U≤FFFF时,采用双字节模式,此时的U不超过16位,双字节正好放得下。
若10000≤U≤10FFFF,则需计算U’=U-0x10000,U’的取值范围是:0≤U’≤FFFFF,U’不大于20位,可以放在四字节模式的模板内。
关于UTF-8和UTF-16的讨论,和汉字的长度有关。在UTF-8中,一个汉字占用3字节。这里说的是基本汉字那2万多个,对于不常用的汉字,需占用4字节。在UTF-16中,一个基本汉字占用2字节。
许多程序员,尤其是老程序员,他们年轻时,unicode还未普及,那时人们记住了:一个汉字两个字节。所以,他们更容易选择UTF-16。还有人坚定地选择GBK,这是一种中国的国标编码。
然后,互联网普及了。人们发现各国的编码不通用,所以就有了unicode。
至于UTF-8中一个汉字占3字节,这没什么的。表达同样的意思,用英语和用汉语,英语的字母个数,约是汉字个数的3倍。如integer,7字节;整数,6字节。二者相差不大。
另外,UTF-16有大端小端问题。且UTF-16已经满了,不能扩充,它甚至需要计算U’来压缩至20位。而UTF-8没有大端小端问题,且可以扩充至31位。
所以,我更喜欢UTF-8,至于GB2312、GBK等编码,早已不再使用了。
UTF-8和UTF-16简介相关推荐
- UTF—8与UTF—8(无bom)格式
BOM--Byte Order Mark,就是字节序标记 在UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF.而FFFE在U ...
- Unicode、UTF-8 和 ISO8859-1到底有什么区别(转载)
本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等. 在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是"d6d0 c ...
- JavaSE-21 字符编码简介
ASCII ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英 ...
- linux有k歌软件吗,在Linux下可用Wine安装和运行暴风影音16、全民K歌
在Linux操作系统下可用Wine安装和运行暴风影音16.全民K歌.exe文件,它们是Windows下的软件,在Linux中借助Wine就可以使用暴风影音16和全民K歌了,已亲测有效. 说明 1.如果 ...
- 达芬奇调色剪辑软件-DaVinci Resolve Studio 16.2.3.15 Win/Mac 中文英文版-安装方法
DaVinci Resolve Studio 16简介 DaVinci Resolve 16是一款将专业8K编辑,色彩校正,视觉效果和音频后期制作功能集于一身的软件工具!只需单击一下,即可在编辑,颜色 ...
- JAVA版不祥之兆等级怎么看,Minecraft基岩版1.16下载-Minecraft基岩版1.16安卓版v1.16.220.52...
Minecraft基岩版1.16是一款沙盒建造类游戏,玩家能在游戏中自由打造自己的游戏世界,长按自己想获取的材料就能获得,玩家能在游戏中感受到很多熏陶的玩法,很多模型建造工具可以使用,感兴趣的玩家快来 ...
- 字符,字节和编码三者的关系
转载自http://www.blogjava.net/fundei/ 1. 编码问题的由来,相关概念的理解 1.1 字符与编码的发展 从计算机对多国语言的支持角度看,大致可以分为三个阶段: 系统内码 ...
- 测试技能整理-python自动化
pycharm工具基本使用及python基本 python简介 Python是一种跨平台.简单易学.面向对象的编程语言一门计算机语言 自动化测试-通过代码取代手工测试 市场自动化语言:python . ...
- java linux urlencode_java字符编码转换研究(转)
1. 概述 本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等. 在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是" ...
- golang中utf8和汉字互转
golang中utf8和汉字互转 package mainimport ("fmt""strconv""strings" )func mai ...
最新文章
- 【Qt】ubuntu QtCreator的pro文件中使用pkg-config
- stringbuilder class再反编译_JVM篇(02.class字节码解析)
- bzoj 3224 普通平衡树 vactor的妙用
- Spring【AOP模块】就是这么简单
- 经典英语口语,不得不看(推荐)
- 淘宝客网站赚钱攻略浅谈
- 14.最长公共前缀-LeetCode
- Dubbo服务服务暴露之ProxyFactory Invoker
- 易语言大漠进行字库制作的时候出现不能展示二值化区域
- 2022-ISCTF-部分MISC和PWN
- EXCEL VBA开发单元格日历选择
- Android多开检测的另一个思路
- Windows10中microsoft商店打不开解决办法
- 订单系统设计 —— 订单管理
- GitHub好玩的项目之你想要的样子 我都有
- SteamVR 2.x 手柄使用3D物体(14)
- 【来日复制粘贴】状态栏随机显示
- 艺术的背后还有纪律——采访印度NIIT CEO有感
- ToB 产品拆解—Temu 商家管理后台
- MATLAB中newff新旧区别