首先介绍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简介相关推荐

  1. UTF—8与UTF—8(无bom)格式

    BOM--Byte Order Mark,就是字节序标记 在UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF.而FFFE在U ...

  2. Unicode、UTF-8 和 ISO8859-1到底有什么区别(转载)

    本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等. 在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是"d6d0 c ...

  3. JavaSE-21 字符编码简介

    ASCII ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英 ...

  4. linux有k歌软件吗,在Linux下可用Wine安装和运行暴风影音16、全民K歌

    在Linux操作系统下可用Wine安装和运行暴风影音16.全民K歌.exe文件,它们是Windows下的软件,在Linux中借助Wine就可以使用暴风影音16和全民K歌了,已亲测有效. 说明 1.如果 ...

  5. 达芬奇调色剪辑软件-DaVinci Resolve Studio 16.2.3.15 Win/Mac 中文英文版-安装方法

    DaVinci Resolve Studio 16简介 DaVinci Resolve 16是一款将专业8K编辑,色彩校正,视觉效果和音频后期制作功能集于一身的软件工具!只需单击一下,即可在编辑,颜色 ...

  6. JAVA版不祥之兆等级怎么看,Minecraft基岩版1.16下载-Minecraft基岩版1.16安卓版v1.16.220.52...

    Minecraft基岩版1.16是一款沙盒建造类游戏,玩家能在游戏中自由打造自己的游戏世界,长按自己想获取的材料就能获得,玩家能在游戏中感受到很多熏陶的玩法,很多模型建造工具可以使用,感兴趣的玩家快来 ...

  7. 字符,字节和编码三者的关系

    转载自http://www.blogjava.net/fundei/ 1. 编码问题的由来,相关概念的理解 1.1 字符与编码的发展 从计算机对多国语言的支持角度看,大致可以分为三个阶段: 系统内码 ...

  8. 测试技能整理-python自动化

    pycharm工具基本使用及python基本 python简介 Python是一种跨平台.简单易学.面向对象的编程语言一门计算机语言 自动化测试-通过代码取代手工测试 市场自动化语言:python . ...

  9. java linux urlencode_java字符编码转换研究(转)

    1. 概述 本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等. 在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是" ...

  10. golang中utf8和汉字互转

    golang中utf8和汉字互转 package mainimport ("fmt""strconv""strings" )func mai ...

最新文章

  1. 【Qt】ubuntu QtCreator的pro文件中使用pkg-config
  2. stringbuilder class再反编译_JVM篇(02.class字节码解析)
  3. bzoj 3224 普通平衡树 vactor的妙用
  4. Spring【AOP模块】就是这么简单
  5. 经典英语口语,不得不看(推荐)
  6. 淘宝客网站赚钱攻略浅谈
  7. 14.最长公共前缀-LeetCode
  8. Dubbo服务服务暴露之ProxyFactory Invoker
  9. 易语言大漠进行字库制作的时候出现不能展示二值化区域
  10. 2022-ISCTF-部分MISC和PWN
  11. EXCEL VBA开发单元格日历选择
  12. Android多开检测的另一个思路
  13. Windows10中microsoft商店打不开解决办法
  14. 订单系统设计 —— 订单管理
  15. GitHub好玩的项目之你想要的样子 我都有
  16. SteamVR 2.x 手柄使用3D物体(14)
  17. 【来日复制粘贴】状态栏随机显示
  18. 艺术的背后还有纪律——采访印度NIIT CEO有感
  19. ToB 产品拆解—Temu 商家管理后台
  20. MATLAB中newff新旧区别

热门文章

  1. SQL生僻字模糊查询
  2. 基于北向资金指数择时策略验证与思考
  3. 利用iptables的SNAT功能实现局域网共享上网
  4. 用python画多啦爱梦图片_哆啦a梦画画步骤
  5. 高速服务器有维修站吗,高速公路上服务区有修车的吗?
  6. Javascript实现打字效果
  7. hbuilder版本更新失败_HBuilderX版本升级问题引发的血案(持续更新中)
  8. 京东校园招聘2019.04.13 第一题 01序列拉齐
  9. 微信微信人工客服电话/微信客服怎么正确拨打在线服务电话
  10. javaweb图片路径问题