2010-04-16 47 views
3

我正在調用一個調用休息Web服務的應用程序。有時XML響應包含手機無法顯示的字符。顯示這些字符時,會顯示空白框。我想過濾掉這些字符。如何檢測角色是否能夠在屏幕上顯示?如何刪除從Web服務返回的無法識別的字符?

一些具體字符包括:

http://www.fileformat.info/info/unicode/char/0094/index.htm http://www.fileformat.info/info/unicode/char/0080/index.htm http://www.fileformat.info/info/unicode/char/0092/index.htm

+3

您確定這是「理解」(無法識別的XML實體),而不是「顯示」(應用程序字體缺少某些Unicode代碼點)的問題嗎?如果是前者,則答案是在讀取XML之前清理XML;如果是後者,則可以通過選擇(或捆綁)具有更多代碼點的其他字體來解決問題。 – tucuxi 2010-04-19 16:57:22

+1

你能解釋哪種字符沒有正確顯示。另外,你使用的是什麼字體。 – the100rabh 2010-04-20 18:45:03

+0

如果你可以發佈更多的信息,比如沒有正確顯示的charackters,我們可能會給你一個不那麼一般的答案 – Janusz 2010-04-21 07:10:47

回答

5

支持Android以下encodings

  • Xml.Encoding ISO_8859_1
  • Xml.Encoding US_ASCII
  • Xml.Encoding UTF_16
  • Xml.Encoding UTF_8

US_ASCII不應該讓任何問題。

對於ISO_8859_1,您應該檢查wiki 控制字符0x00-0x1f和0x7f-0x9f並過濾它們。 並且當然使用匹配的字體。

使用UTF_8或16是比較複雜的,讀Joels The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets

您可能會發現這個郵件list有用。

1

首先,試圖讓你的設備與默認字符集:

Charset.defaultCharset(); 

然後試圖讓你的XML字符集看在XML聲明的僞屬性或Content-Type頭的HTTP調用。
例如:

<?xml version="1.0" encoding="utf-8" ?> 

Content-Type: text/html; charset=utf-8 

如果你的設備的默認字符集是從XML的字符集不同,你有當您處理新的字符串與注意:

new String(bytes); 

因爲如果您忘記指定正確的編碼,Dalvik將使用設備的默認編碼和合理的顯示錯誤。
記住用

new String(bytes, encoding); 
0

看來我可以調用每個字符Character.isIdentifierIgnorable(),不包括它,如果它是可忽略的。 Character.isISOControl()也可能會工作。

相關問題