Android v4.0 WebView 中的 Display® 注册商标符号?

Oll*_*e C 3 android android-webview android-4.0-ice-cream-sandwich

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

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

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

\n\n
String html = getString(R.string.MY_STRING);\n((WebView)findViewById(R.id.terms_web_view)).loadData(html, "text/html", "UTF-8");\n
Run Code Online (Sandbox Code Playgroud)\n\n

我也尝试过这个,但没有帮助:\n webView.getSettings().setDefaultTextEncodingName("UTF-8");

\n\n

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

\n\n

更新\n我在其他设备上进行了测试。我只能在 Android v4.04 上的 Galaxy Nexus 上重现此问题。在 Nexus One v2.3.x、Wildfire S(v2.3.x)和 Samsung Tab 10.1(v3.2)上,它运行良好。我更改了问题标题以澄清这是 ICS 问题。

\n

Com*_*are 5

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

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

<string name="MY_STRING">&amp;reg;</string>
Run Code Online (Sandbox Code Playgroud)

IIRC,应该&reg;在您调用 后解码为getString().

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