我有一个java.lang.CharSequence
的实例。我需要确定此实例是否是Unicode scalar values的序列(即,实例是否采用UTF-16编码形式)。尽管有java.lang.String
的保证,但Java字符串不一定是UTF-16编码形式(至少不是根据最新的Unicode specification,目前为6.2),因为它可能包含隔离的surrogate code units 。 (但Java字符串是Unicode 16-bit string。)
有几种明显的方法可以解决这个问题,包括:
然而,好像这样的东西应该已经作为库函数存在了。我只是无法在标准API中找到它。我错过了,还是需要实现它?
答案 0 :(得分:1)
试试这个功能
static boolean isValidUTF16(String s) {
for (int i = 0; i < s.length(); i++) {
if (Character.isLowSurrogate(s.charAt(i)) && (i == 0 || !Character.isHighSurrogate(s.charAt(i - 1)))
|| Character.isHighSurrogate(s.charAt(i)) && (i == s.length() -1 || !Character.isLowSurrogate(s.charAt(i + 1)))) {
return false;
}
}
return true;
}
这是一个测试
public static void main(String args[]) {
System.out.println(isValidUTF16("\uDC00\uDBFF"));
System.out.println(isValidUTF16("\uDBFF\uDC00"));
}