在Android v4.0 WebView中显示®注册商标符号?

时间:2012-04-11 12:52:05

标签: android android-webview android-4.0-ice-cream-sandwich

源HTML字符串(包括符号)来自strings.xml资源文件,并且目标是在WebView中显示。我在资源中测试了这个:

<string name="MY_STRING">®</string>
  • 使用资源(®)中的实际商标符号,项目构建,但在WebView中显示时,它显示为“®”(即“A”抑扬符,后跟注册商标符号) - 即两个字符显示,第一个不正确&amp;不希望的。
  • 使用实体引用&#174;
  • 时,我看到相同的结果
  • 使用&reg;失败,项目无法构建。

这是将字符串资源推送到WebView中的代码:

String html = getString(R.string.MY_STRING);
((WebView)findViewById(R.id.terms_web_view)).loadData(html, "text/html", "UTF-8");

我也尝试了这个,但它没有帮助:     webView.getSettings()setDefaultTextEncodingName( “UTF-8”);

我将HTML字符串推送到Logcat,它看起来很好 - 它正确地显示了符号。因此,如果字符串正常,并且WebView设置为使用UTF-8,为什么符号无法正确显示?

更新 我在其他设备上测试过。我只能在Android v4.04上的Galaxy Nexus上重现此问题。在Nexus One v2.3.x,v2.3.x上的Wildfire S和v3.2上的Samsung Tab 10.1上,它运行正常。我已经改变了问题标题,以澄清这是一个ICS问题。

3 个答案:

答案 0 :(得分:4)

字符串资源不是为了保存任意HTML而设计的,包括任意实体引用。

如果你预先逃脱它,你可能能够获得任意实体引用:

<string name="MY_STRING">&amp;reg;</string>

IIRC,在您致电&reg;后,应解码为getString()

在一天结束时,您需要&reg;WebView。如果您无法确定使用字符串资源的方法,则需要将此值存储在其他位置。

答案 1 :(得分:1)

您正在使用loadData(html,“text / html”,“UTF-8”);这个方法期望你的变量html中有一个html字符串。但事实并非如此。试试

String html = "<html><body>My text is ®</body></html>";
例如

- 已更新为拥有完整的HTML文档

如果您将其存储在资源文件中,请使用:

<string name="MY_STRING" formatted="false"><html><body>My text is ®</body></html></string>

答案 2 :(得分:0)

这不是和Android开发人员的回答,但只是一些简单的事情,如果你试图给某人发短信,并且Ⓡ或™都不能用作符号(比如我的LG手机Android 7.0)。只需从这个消息线程中复制这些符号,然后将它们发送给自己,或者将它们填入快速备忘录中。然后你可以随时使用它们。