对于任何给定的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?的可能重复项,我只能说,
String
和char[]
之间有区别,并且前者至少在理论上可以保证其内容是后者所没有的。我不是在问关于数组的问题,我是在问关于String
的问题。 最佳答案
否。String
只是char[]
的不受限制的包装器:
char data[] = {'\uD800', 'b', 'c'}; // Unpaired lead surrogate
String str = new String(data);
要为格式正确的UTF-16数据测试
String
或char[]
,可以使用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/