2012-09-14 155 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