gpt4 book ai didi

java - Java 字符数组是否始终是有效的 UTF-16(Big Endian)编码?

转载 作者:搜寻专家 更新时间:2023-10-31 19:37:58 25 4
gpt4 key购买 nike

假设我将 Java 字符数组 (char[]) 实例编码为字节:

  • 每个字符使用两个字节
  • 使用big endian编码(最高有效8位在最左边,最低有效8位在最右边)

这会始终创建有效的 UTF-16BE 编码吗?如果不是,哪些代码点会导致无效编码?


这个问题与this question about the Java char type密切相关和 this question about the internal representation of Java strings .

最佳答案

没有。您可以创建包含您想要的任何 16 位值的 char 实例——没有任何东西可以将它们限制为有效的 UTF-16 代码单元,也不会将它们的数组限制为有效的 UTF -16 序列。甚至 String 也不要求其数据是有效的 UTF-16:

char data[] = {'\uD800', 'b', 'c'};  // Unpaired lead surrogate
String str = new String(data);

Chapter 3 中规定了对有效 UTF-16 数据的要求Unicode 标准(基本上,所有内容都必须是 Unicode 标量值,并且所有代理项都必须正确配对)。您可以测试 char 数组是否为有效的 UTF-16 序列,并使用 CharsetEncoder 将其转换为 UTF-16BE(或 LE)字节序列:

CharsetEncoder encoder = Charset.forName("UTF-16BE").newEncoder();
ByteBuffer bytes = encoder.encode(CharBuffer.wrap(data)); // throws MalformedInputException

(如果您有字节,则类似地使用 CharsetDecoder。)

关于java - Java 字符数组是否始终是有效的 UTF-16(Big Endian)编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31613779/

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