对于任何给定的Java字符串s,我想知道是否保证s表示的字符数组是有效的UTF-16字符串,例如:

final char[] ch = new char[s.length()];
for (int i = 0; i < ch.length; ++i) {
    ch[i] = s.charAt(i);
}
// Is ch guaranteed to be a valid UTF-16 encoded string?


如果不是,那么哪些简单的Java语言测试用例会产生无效的UTF-16?

编辑:有人将这个问题标记为[Is a Java char array always a valid UTF-16 (Big Endian) encoding?的可能重复项,我只能说,Stringchar[]之间有区别,并且前者至少在理论上可以保证其内容是后者所没有的。我不是在问关于数组的问题,我是在问关于String的问题。

最佳答案

否。String只是char[]的不受限制的包装器:

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


要为格式正确的UTF-16数据测试Stringchar[],可以使用CharsetEncoder

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

关于java - Java字符串的实例是否总是有效的UTF-16?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32240366/

10-11 22:15
查看更多