其他分享
首页 > 其他分享> > 如何验证CharSequence的实例是否是Unicode标量值的序列?

如何验证CharSequence的实例是否是Unicode标量值的序列?

作者:互联网

我有一个java.lang.CharSequence的实例.我需要确定此实例是否是Unicode scalar values的序列(即,实例是否采用UTF-16编码形式).尽管java.lang.String保证,Java字符串不一定是UTF-16编码形式(至少不是根据最新的Unicode specification,目前为6.2),因为它可能包含隔离的surrogate code units.(但是,Java字符串是,a Unicode 16-bit string.)

有几种明显的方法可以解决这个问题,包括:

>迭代序列的code points,明确地将每个标记验证为Unicode标量值.
>使用正则表达式搜索隔离的代理代码点.
>通过reports encoding errors character-set encoder管道字符序列.

似乎这样的东西应该已经作为库函数存在了.我只是在标准API中找不到它.我错过了,还是需要实现它?

解决方法:

试试这个功能

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"));
}

标签:java,unicode,utf-16,surrogate-pairs,charsequence
来源: https://codeday.me/bug/20190709/1410465.html