我从一个我无法解析的Feed提供程序的XML中获取带有unicode字符的以下字符串。我也尝试获取这些字符的十六进制代码,然后将其添加到\ u,但这也不起作用。
String str = "</fullText" + ">";
StringBuilder strb = new StringBuilder();
char[] chars = str.toCharArray();
for (int i = 0; i < chars.length; i++) {
char c = chars[i];
if ( c >= Character.MIN_HIGH_SURROGATE && c <= Character.MAX_HIGH_SURROGATE ) {
char ch2 = chars[i+1];
} else
strb.append(c);
}
System.out.println(strb.toString());
理想情况下,这应该跳过这些字符,但事实并非如此。我想摆脱字符串中的那些字符。
有没有人遇到过类似的问题?在这方面的任何帮助都非常感谢。
Vaibhav的
答案 0 :(得分:1)
代码似乎只跳过高代理代码点。使其跳过以下低代理的最简单的改变是更改行
char ch2 = chars[i+1];
到
i++;
但是,它更强大,并且使代码更易于以这种方式编写循环:
for (int i = 0; i < chars.length; i++) {
char c = chars[i];
Character.UnicodeBlock block = Character.UnicodeBlock.of(c);
if(block != Character.UnicodeBlock.HIGH_SURROGATES &&
block != Character.UnicodeBlock.LOW_SURROGATES) {
strb.append(c);
}
}
这也处理包含隔离的高或低代理或错误顺序的高和低代理的格式错误的数据(这意味着即使您将有效的代理对处理为可接受的字符,也应该跳过或错误处理的数据)。