MAX_SIZE,其中 java 有一个已检查的异常 -6ren">
gpt4 book ai didi

java - 不能用 UTF-8 表示的字符串

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:38:00 24 4
gpt4 key购买 nike

我正在为 String 的大小创建一组测试,为此我正在使用类似这样的东西 myString.getBytes("UTF-8").length > MAX_SIZE,其中 java 有一个已检查的异常 UnsupportedEncodingException

出于好奇,并进一步考虑其他可能的测试场景,是否存在不能用UTF-8字符编码表示的文本?

顺便说一句:我做了功课,但没有任何地方(我能找到)指定 UTF-8/Unicode 确实包含所有可能的字符。我知道它的大小是 2^32 并且其中许多仍然是空的,但问题仍然存在。

最佳答案

The official FAQ from the Unicode Consortium在这个问题上非常清楚,并且是与 UTF-8、UTF-16 等相关的所有问题的重要信息来源。

请特别注意以下引述(强调我的):

Q: What is a UTF?

A: A Unicode transformation format (UTF) is analgorithmic mapping from every Unicode code point (except surrogatecode points) to a unique byte sequence. The ISO/IEC 10646 standarduses the term “UCS transformation format” for UTF; the two terms aremerely synonyms for the same concept.

Each UTF is reversible, thus every UTF supports lossless roundtripping: mapping from any Unicode coded character sequence S to asequence of bytes and back will produce S again. To ensure roundtripping, a UTF mapping must map all code points (except surrogatecode points) to unique byte sequences. This includes reserved(unassigned) code points and the 66 noncharacters (including U+FFFEand U+FFFF).

因此,如您所见,根据定义,所有 UTF 编码(包括 UTF-8)都必须能够处理所有 Unicode 代码点(代理项代码除外当然要点,但无论如何它们都不是真正的角色)。

此外,这是直接来自 Unicode Standard 的引述这也谈到了这一点:

The Unicode Standard supports three character encoding forms: UTF-32,UTF-16, and UTF-8. Each encoding form maps the Unicode code pointsU+0000..U+D7FF and U+E000..U+10FFFF to unique code unit sequences.

如您所见,指定的字符范围涵盖了整个分配的 Unicode 范围(当然不包括代理字符范围)。

关于java - 不能用 UTF-8 表示的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38318385/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com