【发布时间】:2011-08-29 02:54:23
【问题描述】:
我正在寻找示例 1 字节、2 字节、3 字节、4 字节、5 字节和 6 字节 unicode 字符。任何指向所有不同 unicode 字符的某种引用的链接以及它们有多大(按字节)将不胜感激。我希望这个参考也有像\uXXXXX这样的代码点。
【问题讨论】:
标签: java unicode sample-data codepoint
我正在寻找示例 1 字节、2 字节、3 字节、4 字节、5 字节和 6 字节 unicode 字符。任何指向所有不同 unicode 字符的某种引用的链接以及它们有多大(按字节)将不胜感激。我希望这个参考也有像\uXXXXX这样的代码点。
【问题讨论】:
标签: java unicode sample-data codepoint
没有“1 字节、2 字节、3 字节、4 字节、5 字节和 6 字节的 unicode 字符”之类的东西。
您可能会谈论 Unicode 字符的 UTF-8 表示。类似地,Java 中的字符串在内部是用 UTF-16 表示的,所以 Java 的char 类型代表了一个 UTF-16 的 16 位代码单元,每个 Unicode 字符可以由其中一个或两个这些代码单元来表示,并且每个代码单元可以在字符串文字中表示为\uxxxx(请注意,这些序列中只有 4 个十六进制数字,因为代码单元是 16 位长)。
因此,如果您需要 Unicode 字符及其 UTF-8 和 UTF-16 表示形式的参考,您可以查看the table at fileformat.info。
另请参阅:
【讨论】:
正如 axtavt 所指出的,n 字节 Unicode 字符的概念是没有意义的;假设您的意思是 UTF-8,那么可能会帮助您进行测试等的一个非常简单的表可能如下所示。请注意,所有示例字符都可以在我的浏览器(Ubuntu 上的 Chrome)上使用,但您的里程可能会在显示、复制/粘贴等方面有所不同。
UTF-8 bytes Start End Example Character
1 U+0000 U+007F ! EXCLAMATION MARK U+0021)
2 U+0080 U+07FF ¶ PILCROW SIGN (U+00B6)
3 U+0800 U+FFFF ‱ PER TEN THOUSAND SIGN (U+2031)
4 U+10000 U+1FFFFF ??? MUSICAL SYMBOL SIXTEENTH NOTE (U+1D161)
理论上,UTF-8 中可以有 5 个或 6 个字节的值,但 Unicode 的 32 位地址空间实际上被限制为最大 10FFFF,因此不需要超过 4 个字节。
请注意,这里有一个重要的警告:Java 的 char 不是 Unicode 字符;它是 UTF-16 的 16 位代码单元,经常看到将非 BMP 字符(如上面的 U+1D161)视为 2 个字符的数据流,并相应地使用 UTF-8。例如:
Character: U+1D161
UTF-8 encoding: 0xF0 0x9D 0x85 0xA1
UTF-16 encoding: 0xD834 0xDD61
UTF-16 code points individually encoded as UTF-8: 0xED 0xA0 0xB4 0xED 0xB5 0xA1
请注意,这具有显然显示 6 字节 UTF-8 字符的效果,但实际上 UTF-8 不允许这样做。 UTF-8 必须是原始代码点的编码,而不是代表这些点的 UTF-16 代码单元的编码。这并不意味着你在野外看不到它......
【讨论】:
【讨论】:
perl -CS -e 'print chr(0x101)' | wc -c 打印 2,perl -CS -e 'print chr(0x1020)' | wc -c 打印 3,perl -CS -e 'print chr(0x1F608) | wc -c 打印 4。对于 UTF-8 编码相应的代码点,这些答案以字节为单位。最高的合法 Unicode 代码点是 0x10FFFF,但 UTF-8 可以 编码更大的代码点。例如,在 64 位机器上:perl -CS -e 'print chr(0xFFFF_FFFF_FFFF_FFFF)' | wc -c 报告 13 个字节。
对于那些只追求实际样品的人 这里有 4 个样本。
我不完全确定为什么 0xb5 是 2 个字节而 0x2192 是 3 个字节。也许有人可以解释一下。
【讨论】: