3

源 HTML 字符串(包括符号)来自 strings.xml 资源文件,并且注定要显示在 WebView 中。我已经在资源中对此进行了测试:

<string name="MY_STRING">®</string>
  • 使用资源 (®) 中的实际商标符号,项目构建,但在 WebView 中显示时显示为“®”(即“A”抑扬符,后跟注册商标符号) - 即显示两个字符,第一个不正确和不需要的。
  • 使用实体引用时,我看到了相同的结果,&#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、Wildfire S 在 v2.3.x 和 Samsung Tab 10.1 在 v3.2 上,它运行良好。我更改了问题标题以澄清这是一个 ICS 问题。

4

3 回答 3

5

字符串资源并非旨在保存任意 HTML,包括任意实体引用。

如果您预先转义它,您可能可以获得任意实体引用来工作:

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

IIRC,应该&reg;在您调用getString().

归根结底,您需要&reg;到达WebView. 如果您无法确定使用字符串资源执行此操作的方法,则需要将此值存储在其他地方。

于 2012-04-11T13:34:00.543 回答
1

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

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

例如。

--updated 有一个完整的 html 文档

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

<string name="MY_STRING" formatted="false"><html><body>My text is ®</body></html></string>
于 2012-04-11T13:02:13.193 回答
1

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

于 2018-01-10T03:28:09.867 回答