Unicode 入门详解(V14.0版本)
Unicode:
官网: https://home.unicode.org/
- Unicode Version 14.0标准版本的发布声明(2021-09-14):
https://home.unicode.org/announcing-the-unicode-standard-version-14-0/ - V 14.0的标准文档:
http://www.unicode.org/versions/Unicode14.0.0/ - 技术文档(有术语查询,问答FQA,其他):
http://unicode.org/main.html - 字符的代码和图像:
http://www.unicode.org/charts/ - 博客(记录发布概要-按时间):
http://blog.unicode.org/ - 文档注册表(按年份时间分类):
https://www.unicode.org/L2/ - Unicode CLDR(Common Locale Data Repository)
https://cldr.unicode.org/
Unicode Locale Data Markup Language. The XML specification for the exchange of locale data, defined by Unicode Technical Standard#35, “Unicode Locale Data Markup Language (LDML).” (See also Unicode Common Locale Data Repository.) - ICU(International Components for Unicode)
C/C++和Java的开源库的集合,可以对Unicode和国际化的支持。
https://icu.unicode.org/
入门(从完全不了解开始):
进入官网—》选择最新发布版本的声明—》滚到最后,点击Unicode standard标准—》选择 第一章Introduction(介绍),打开ch01.pdf。
相当于进入: https://www.unicode.org/versions/Unicode14.0.0/ch01.pdf
第一章Introduction(介绍,共9页,稍微介绍一下) 要点:
1)Unicode标准为每一个字符指明一个数字值(即code point,码点)和一个名称。
2) Unicode字符以三种编码格式之一表示:一个是32bit格式(UTF-32),一个是16bit格式(UTF-16),一个是8bit格式(UTF-8)。UTF-8,这个8bit的,面向字节的格式,被设计成与现有的基于ASCII格式的系统兼容。
3)Unicode标准 包含 1,114,112 个 码点(code points)。
4)最开始的65,536个code point(0到0xFFFF之间)是用的最多的主体,也称之为BMP(Basic Multilingual Plane)(基本的多语言级别)
5)Unicode标准V14.0版本 一共包含144697个来自世界的图形的字符。
6) Unicode标准保留了 6,400个 code points在 BMP 可以为私有使用,可以使用不包含在Unicode标准里的字符。
第二章 General Structure(主要结构,共63页,具体讲解):
2.4 Code Points and Characters
- codespace:一定范围内的整数用来对抽象的字符(abstract character,抽象的就是不知到底是什么)进行编码。
- code point: 在codespace的整数集合里的一个特定的整数。
- encoded character(编码字符):就是具体的,已知的。当在codespace里的一个抽象字符映射或赋值给一个具体的code point,则其指向一个编码字符。
- 字符总数:在Unicode标准里,codespace的范围是0x0~0x10FFFF,总共1,114,112个。
- codespace的分配(allocation): codespace是有组织的,特定范围内的codespace会用作在某一类的抽象字符。
- 码点(code point)的表示方法: 一般用"U+"为前缀,其后的数字是16进制。比如,U+0061表示字母a
- code point类型:Graphic、Format、Control、Private-use; Surrogate、Noncharacter、Reserved
2.5 Encoding Forms(3种编码格式介绍)
2.8 Unicode Allocation(BMP概要)
2.9 Details of Allocation(BMP具体讲解)
2.11 Combining Characters(字符组合在一起显示,不同的字符合并为一个字符)
- \u092b\u093f
- \u0061\u0308\u0303\u0323\u032d
单个a,和其他字符分开:
//
组合在一起:
2.13 Special Characters(特殊字符)
- Byte Order Mark (BOM):UTF-32和UTF-16是对大小端敏感的,用 U+FEFF和 U+FFFE这两个大小端镜像翻转
- The Replacement Character:U+FFFD,可以替代未知的字符。
第三章 Conformance(一致性,共86页,大部分是规范和annexe(附件)):
3.8 Surrogates(替代者)
- D71 High-surrogate code point: A Unicode code point in the range U+D800 to U+DBFF.
- D72 High-surrogate code unit: A 16-bit code unit in the range D800 to DBFF, used in UTF-16 as the leading code unit of a surrogate pair.
- D73 Low-surrogate code point: A Unicode code point in the range U+DC00 to U+DFFF.
- D74 Low-surrogate code unit: A 16-bit code unit in the range DC0016 to DFFF16, used in UTF-16 as the trailing code unit of a surrogate pair.
- D75 Surrogate pair: A representation for a single abstract character that consists of a sequence of two 16-bit code units, where the first value of the pair is a high-surrogate code unit and the second value is a low-surrogate code unit.
3.9 Unicode Encoding Forms(Unicode编码格式)
Unicode标准支持3个字符编码格式:UTF-32、UTF-16、UTF-8.每一种编码格式会包会把码点(code point)在U+0000…U+D7FF 和 U+E000…U+10FFFF 映射到一个独一无二的代码单元(code unit)序列。而代码单元的大小是被编码格式规定的。本节将会展示这3种编码格式的正式定义。
D76 Unicode scalar value(标量值):除了High-surrogate code point和 Low-surrogate code point(上一节有定义)的Unicode 码点。
- 其值在0 ~D7FF 和 E000 ~ 10FFFF。闭区间。
D77 code unit(代码单元):The minimal bit combination that can represent a unit of encoded text for processing or interchange.
- 代码单元是计算机存储的部分单元。UTF-8的代码单元是8bit,UTF-16是16bit,UTF-32是32bit。
- 代码单元在信息产业也称为code value。
- 在 Unicode 标准中,某些代码单元的特定值不能单独用于表示编码字符。 此限制适用于 UTF-16 中的单独的Surrogate(替代者)代码单元和 UTF-8 中的字节 80 ~FF。
D78 Code unit sequence(代码单元序列):一个有序的代码单元序列,一个或多个。
- 当代码单元是8bit时,也称之位字节序列。
D79 Unicode 编码形式(Unicode encoding form)将每个 Unicode 标量值分配给一个唯一的代码单元序列。
- 由于历史原因,Unicode 编码形式也称为 Unicode(或 UCS)transformation formats (UTF)。 这个词实际上是模棱两可的它用于编码形式和编码方案之间。
- Unicode标量值的集合与代码单元序列集合之间建立一 一映射的关系。
D80 Unicode string: A code unit sequence containing code units of a particular Unicode encoding form.
D81 Unicode 8-bit string: A Unicode string containing only UTF-8 code units.
D82 Unicode 16-bit string: A Unicode string containing only UTF-16 code units.
D84 Ill-formed(格式错误):声称采用 Unicode 编码形式的 Unicode 代码单元序列称为格式错误,当其不遵循该 Unicode 编码格式的规范。
- 例如,对应于定义的 Unicode 标量值范围之外的码点的任何代码单元序列都将是格式错误的。
D85 Well-formed(格式正确):遵守规范。
例子:
码点 | 编码格式 | 代码单元序列 |
---|---|---|
U+004D | UTF-32 | 0000004D |
UTF-16 | 004D | |
UTF-8 | 4D | |
U+0430 | UTF-32 | 00000430 |
UTF-16 | 0430 | |
UTF-8 | D0 B0 | |
U+4E8C | UTF-32 | 00004E8C |
UTF-16 | 4E8C | |
UTF-8 | E4 BA 8C | |
U+10302 | UTF-32 | 00010302 |
UTF-16 | D800 DF02 | |
UTF-8 | F0 90 8C 82 |
UTF-32:
- 略
UTF-16:
- D91 UTF-16 encoding form: 这种格式将Unicode标量值,位于U+0000…U+D7FF 和 U+E000…U+FFFF,映射到1个无符号的16bit代码单元上(标准值与代码单元值相同);而对于标量值,位于U+10000…U+10FFFF之间,映射到一个surrogate pair(定义间3.8 Surrogates)
- surrogate pair值的计算,见附录Appendix C.3, UTF-8 and UTF-16.
标量值 | UTF-16 |
---|---|
xxxxxxxxxxxxxxxx | xxxxxxxxxxxxxxxx |
000uuuuuxxxxxxxxxxxxxxxx | 110110wwwwxxxxxx 110111xxxxxxxxxx |
Note: wwww = uuuuu - 1
UTF-8:
- D92 UTF-8 encoding form: 这个编码格式把每个Unicode标量值映射到字节序列上(1个字节、2个字节、3个字节或4个字节)。具体见下表。
- 具体见附录 Appendix C.3, UTF-8 and UTF-16
标量值 | 第一字节 | 第二字节 | 第三字节 | 第四字节 |
---|---|---|---|---|
00000000 0xxxxxxx | 0xxxxxxx | |||
00000yyy yyxxxxxx | 110yyyyy | 10xxxxxx | ||
zzzzyyyy yyxxxxxx | 1110zzzz | 10yyyyyy | 10xxxxxx | |
000uuuuu zzzzyyyy yyxxxxxx | 11110uuu | 10uuzzzz | 10yyyyyy | 10xxxxxx |
正确的格式:
标量值 | 第一字节 | 第二字节 | 第三字节 | 第四字节 |
---|---|---|---|---|
U+0000…U+007F | 00…7F | |||
U+0080…U+07FF | C2…DF | 80…BF | ||
U+0800…U+0FFF | E0 | A0…BF | 80…BF | |
U+1000…U+CFFF | E1…EC | 80…BF | 80…BF | |
U+D000…U+D7FF | ED | 80…9F | 80…BF | |
U+E000…U+FFFF | EE…EF | 80…BF | 80…BF | |
U+10000…U+3FFFF | F0 | 90…BF | 80…BF | 80…BF |
U+40000…U+FFFFF | F1…F3 | 80…BF | 80…BF | 80…BF |
U+100000…U+10FFFF | F4 | 80…8F | 80…BF | 80…BF |
3.10 Unicode Encoding Schemes(编码方案)
- D95 UTF-8 encoding scheme: UTF-8数据流使用
<EF BB BF>
,作为其开头表示时UTF-8编码。 - 我们在window系统下,创建一个UTF-8编码的文本文件,内容时aaa。查看该文件的hex格式,开始时 EF BB BF,后面61 61 61就是文本内容aaa了。
Windows PowerShell
版权所有 (C) Microsoft Corporation。保留所有权利。PS D:\docsify\docs> type .\a.txt
aaaPS D:\docsify\docs> format-Hex -Path .\a.txt路径: D:\docsify\docs\a.txt00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F00000000 EF BB BF 61 61 61 aaa
- D98 UTF-16 encoding scheme: 用BOM开头,
<FE FF>
表示大端、<FF FE>
表示小端。如果没有BOM,且缺少上层协议,则默认其为大端。
第n章:
- 略
Java与 UTF-16编码
- 在设计Java时决定采用16位的Unicode字符集,这样会比使用8位字符集的程序设计语言有很大的改进。
- 在Java中,char类型描述了UTF-16编码中的一个代码单元,即16bit大小。
- Supplementary characters(补充字符)在Unicode里的字符其code point超过了U+FFFF。
- Oracle文档:在Java平台的补充字符
- UTF-16编码采用不同长度的编码表示所有Unicode码点。在基本的多语言级别中,每个字符用16位表示,通常被称为代码单元(code unit);而辅助字符采用一对连续的代码单元进行编码。这样构成的编码值落入基本的多语言级别中空闲的2048字节内,通常被称为替代区域(surrogate area)[U+D800~U+DBFF用于第一个代码单元,U+DC00~U+DFFF用于第二个代码单元]。这样设计十分巧妙,我们可以从中迅速地知道一个代码单元是一个字符的D编码,还是一个辅助字符的第一或第二部分
- 原来的16字节可以表示0-0xFFFF(共65536个字符),加上替代区域则多了(DBFF-D800+1)*(DFFF-DC00+1)=
256*1025
=262144个字符。
结尾
1)Unicode在线测试工具
2)Unicode:Surrogate Pairs UTF-16中用于扩展字符
3)https://graphemica.com/
- 按块分类、按符号分类、按类型分类、按编号排序。
- 支持用code point的格式对字符进行搜索
- 详细讲解每个字符,比如 U+1F933、图像是
Unicode 入门详解(V14.0版本)相关推荐
- Python str / bytes / unicode 区别详解 - Python零基础入门教程
目录 一.前言 二.Python str / bytes / unicode 区别 1.Python2.x 版本中 str / bytes / unicode 区别 2.Python3.x 版本中 s ...
- vue.js2.0 java_详解vite2.0配置学习(typescript版本)
介绍 尤于溪的原话. vite与 Vue CLI 类似,vite 也是一个提供基本项目脚手架和开发服务器的构建工具. vite基于浏览器原生ES imports的开发服务器.跳过打包这个概念,服务端按 ...
- FFmpeg入门详解之89:HTTP-FLV讲解
HTTP-FLV简介 HTTP-FLV,即将音视频数据封装成 FLV,然后通过 HTTP 协议传输给客户端. HLS 其实是一个 "文本协议",而并非流媒体协议.那么,什么样的协议 ...
- FFmpeg入门详解之105:m3u8文件格式详解
简介 M3U8 是 Unicode 版本的 M3U,用 UTF-8 编码."M3U" 和 "M3U8" 文件都是苹果公司使用的 HTTP Live Stream ...
- Kati详解-Android10.0编译系统(五)
摘要:本节主要来讲解Kati把Makefile编译成build-xxx.ninja,那么Kati是什么? 是如何工作的呢? 阅读本文大约需要花费24分钟. 文章首发微信公众号:IngresGe 专注于 ...
- mapboxGL入门详解
MapBox GL 入门详解 1.基础知识介绍 mapbox GL Js JavaScript地图库: 使用webGL渲染,支持大数据量: 支持矢量切片渲染地图: 与mapbox其他工具兼容.生态系统 ...
- Jetpack Compose入门详解(实时更新)
Jetpack Compose入门详解 前排提醒 前言(Compose是什么) 1.实战准备 一.优势与缺点 二.前四课 三.标准布局组件 1.Column 2.Row 3.Box 四.xml和com ...
- FFmpeg入门详解之111:RTSP协议2
rtsp消息详解 1.RTSP的消息有两大类,一是请求消息(request),一是回应消息(response),两种消息的格式不同. 请求消息格式: 方法 URI RTSP版本 CR LF 消息头 C ...
- FFmpeg入门详解之119:FFmpeg的SDK编程回顾总结并操练
3.FFmpeg的SDK编程回顾总结并操练 参考课程:"FFmpeg4.3--系列5--SDK二次开发详解与实战" FFmpeg主要框架 FFmpeg骨架:"八大金刚&q ...
- Seeeduino XIAO入门详解
Seeeduino XIAO入门详解 文章目录 Seeeduino XIAO入门详解 一.开发板概述 二.Arduino IDE开发 三.CircuitPython开发 一.开发板概述 Seeed ...
最新文章
- Javascript操作table,tr,td和表格CSS样式设置小常识
- python输出print到txt-pycharm实现print输出保存到txt文件
- buildroot--ubootkernelrootfs全编译工具
- 随机森林与梯度提升树
- 在TOMCAT中部署项目的几种方法
- 度秘语音引擎app_语音机器人哪家强 度秘/小冰/Siri/小娜横向评测
- ansys怎么删除线段_科学网—ansys常用命令 - 刘敬寿的博文
- android 简单获取实时天气数据_绘图本身很简单但是获取数据很难
- redis 支持 json_Spring Boot 中集成 Redis
- 基于Java实现的天气预报APP安卓项目MyWeather
- WM6电话簿转到Android系统
- android访问服务器405,android
- 信号完整性(SI)电源完整性(PI)学习笔记(二十六)S参数在信号完整性中的应用(一)
- mysql架构学习——数据库结构优化笔记
- 山姆公司关于营销培训方案
- 企业管理软件领域的核心竞争力
- 如何新建一个看不见的文件夹(我们的游戏都在里头)
- ecshop 简单修改 可做淘宝客网站
- mei yan xiao guo for android
- 一个成熟恋情必须经历的4个阶段
热门文章
- Python str / bytes / unicode 区别详解 - Python零基础入门教程