Ord*_*iel 5 java unicode utf-8 character-encoding
我正在为 a 的大小创建一组测试String,因此我正在使用类似这样的东西myString.getBytes("UTF-8").length > MAX_SIZE,其中 java 有一个已检查的异常UnsupportedEncodingException。
只是出于好奇,并进一步考虑其他可能的测试场景,是否存在无法用 UTF-8 字符编码表示的文本?
顺便说一句:我做了功课,但没有任何地方(我能找到)指定 UTF-8/Unicode 确实包含所有可能的字符。我知道它的大小是 2^32 并且其中许多仍然是空的,但问题仍然存在。
Unicode 联盟的官方常见问题解答在这个问题上非常清楚,并且是与 UTF-8、UTF-16 等相关的所有问题的重要信息来源。
\n特别要注意以下引用(强调我的):
\n\n\n问:什么是UTF?
\n答:Unicode 转换格式 (UTF) 是从每个Unicode 代码点(代理代码点除外)到唯一字节序列的\n算法映射。ISO/IEC 10646 标准\使用术语\xe2\x80\x9cUCS 转换格式\xe2\x80\x9d 表示UTF;这两个术语只是同一概念的同义词。
\n每个 UTF 都是可逆的,因此每个 UTF 都支持无损往返:从任何Unicode 编码的字符序列 S 映射到字节序列并返回将再次产生 S。为了确保往返,UTF 映射必须将所有代码点(代理代码点除外)映射到唯一的字节序列。这包括保留\n(未分配)代码点和 66 个非字符(包括 U+FFFE\n 和 U+FFFF)。
\n
因此,正如您所看到的,根据定义,所有 UTF 编码(包括 UTF-8)必须能够处理所有Unicode 代码点(当然代理代码点除外,但它们不是真正的)字符)。
\n此外,这里直接引用了Unicode 标准,也讨论了这一点:
\n\n\nUnicode 标准支持三种字符编码形式:UTF-32、\nUTF-16 和 UTF-8。每种编码形式都映射 Unicode 代码点\n U+0000..U+D7FF 和 U+E000..U+10FFFF映射到唯一的代码单元序列。
\n
正如您所看到的,指定的字符范围涵盖了整个指定的 Unicode 范围(当然不包括代理字符范围)。
\n|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           3277 次  |  
        
|   最近记录:  |