2012-09-14 122 views
1

我从我的某个提要提供程序的XML中获取具有unicode字符的下面的字符串,这些字符串我无法解析。我也尝试获取这些字符的十六进制代码,然后用\ u作为它的前缀,但这也不起作用。Java无法解析从Feed中收到的几个Unicode字符

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

“无法解析”是什么意思?错误?例外?你的XML源文件是UTF-8吗? –

+0

是的,它是UTF-8我能解析中文和这样的字符,hwever我得到这些箱子里面的01F389书写器,它们没有得到解析并在我的应用程序中显示框。任何想法.. – vaibhav

回答

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

这也处理包含分离的高或低的替代物或在错误的顺序高,低代理(这意味着应该被跳过或错误处理前夜数据格式不正确的数据如果您将有效的代理对作为可接受的字符处理)。

+0

谢谢先生!它解决了这个问题.. – vaibhav