Rad*_*eve 3 unicode encoding utf-8 utf-16
为什么Unicode代码点总是用2个字节(4位)写,即使没有必要?
$ -> U+0024
¢ -> U+00A2
Run Code Online (Sandbox Code Playgroud)
TL; DR这是Unicode Consortium的惯例.
这是正式的定义,见附录A:Unicode标准的符号约定(我在这个时候引用了最新版本,第11版):
在运行文本中,单个Unicode代码点表示为U + n,其中n是四到六个十六进制数字,使用数字0-9和大写字母A-F(分别为10到15).省略前导零,除非代码点具有少于四个十六进制数字 - 例如,U + 0001,U + 0012,U + 0123,U + 1234,U + 12345,U + 102345.
它们是十六进制数字,表示Unicode标量值.最初只有第一平面称为基本多文种平面都有了,该支持的范围U+0000来U+FFFF加以界定.因此,最初U +编码总是有4个十六进制字符.
但是,这仅允许64 Ki(65536)个代码点用于字符(不包括某些保留值).因此单机后来扩展到17架飞机.对于值U+10000或更高的值,前导零被抑制,因此下一个字符被写为U+10000,而不是U+010000.目前有17个64Ki代码点的平面(其中一些可能被保留),从U + 0000,U + 10000 ... U + 90000开始,最后是U100000.
U + xxxx表示法不遵循UTF-8编码.它也不遵循UTF-16,UTF-32或弃用的UCS编码,无论是大端还是小端.但是,Basic Multilingual Plane中的字符编码与十六进制的UTF-16(BE)相同.请注意,UTF-16可能包含代理代码单元,这些代理单元用作转义以对其他平面中的字符进行编码.这些代码单元的范围不映射到字符,因此不会出现在文本代码点表示中.
见例如,正负号,±:
Unicode code point: U+00B1 (as a textual string)
UTF-8 : 0xC2 0xB1 (as two bytes)
UTF-16 : 0x00B1
UTF-16BE : 0x00B1 as 0x00 0xB1 (as two bytes)
UTF-16LE : 0x00B1 as 0xB1 0x00 (as two bytes)
Run Code Online (Sandbox Code Playgroud)
https://www.fileformat.info/info/unicode/char/00b1/index.htm
大部分信息可以在sil.org上找到.
| 归档时间: |
|
| 查看次数: |
163 次 |
| 最近记录: |