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

发布于 2024-08-28 17:27:32 字数 606 浏览 5 评论 0原文

我正在开发一个调用休息网络服务的应用程序。有时,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

I am working on an app which calls a rest web service. Sometimes the xml responses contain characters which the phone can not display. When displaying these characters, an empty box is displayed instead. I would like to filter out these characters. How can I detect if a character will be able to be displayed on the screen?

Some specific characters include:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

娇妻 2024-09-04 17:27:33

Android 支持以下 编码

  • 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 每个软件开发人员绝对必须了解的绝对最低限度Unicode 和字符集

您可能会找到此邮件列表 有用。

Android support the following encodings

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

US_ASCII shouldn't make any problems.

For ISO_8859_1 you should check wiki
for control chars 0x00-0x1f and 0x7f-0x9f and filter them.
And of course use a matching font.

Using UTF_8 or 16 is more complex, read Joels The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets

You might find this mailing list useful.

涙—继续流 2024-09-04 17:27:33

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

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

First of all, try to get the default charset of your device with:

Charset.defaultCharset();

Then try to get the charset of your XML looking in pseudo-attribute of the XML declaration or in Content-Type header of the HTTP call.
For example:

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

or

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

If the default charset of your device is different from the charset of XML, you have to pay attention when you handle new strings with:

new String( bytes);

because if you forget to specify the correct encoding, Dalvik will use the default encoding of the device with plausible display errors.
Remember to use:

new String( bytes, encoding);
生死何惧 2024-09-04 17:27:33

看来我可以对每个字符调用 Character.isIdentifierIgnorable() ,如果它是可忽略的,则不包含它。 Character.isISOControl() 可能也可以工作。

It appears I can call Character.isIdentifierIgnorable() on each character and not include it if it is ignorable. Character.isISOControl() will probably also work.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文