如何删除从Web服务返回的无法识别的字符?

时间:2010-04-16 02:45:07

标签: java xml android parsing encoding

我正在开发一个调用休息网络服务的应用。有时,xml响应包含手机无法显示的字符。显示这些字符时,会显示一个空框。我想过滤掉这些字符。如何检测字符是否能够在屏幕上显示?

一些特定字符包括:

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 个答案:

答案 0 :(得分: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 :(得分:1)

首先,尝试使用以下命令获取设备的默认字符集:

Charset.defaultCharset();

然后尝试使用XML声明的伪属性或HTTP调用的Content-Type标头来查看XML的字符集。
例如:

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

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

如果设备的默认字符集与XML的字符集不同,则在处理新字符串时必须注意:

new String( bytes);

因为如果您忘记指定正确的编码,Dalvik将使用具有合理显示错误的设备的默认编码。
记得使用:

new String( bytes, encoding);

答案 2 :(得分:0)

看来我可以在每个角色上调用Character.isIdentifierIgnorable(),如果可以忽略则不包含它。 Character.isISOControl()也可能有用。