2010-04-16 40 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()也可能会工作。

相关问题