【问题标题】:Android WebView can't show copyright or trademark symbols?Android WebView 不能显示版权或商标符号?
【发布时间】:2012-03-08 17:31:57
【问题描述】:

当我在网络浏览器中显示项目符号、版权符号、商标标志时,它们 看起来不错。

// bullets: http://losangeles.craigslist.org/wst/acc/2900906683.html
// bullets: http://losangeles.craigslist.org/lac/acc/2902059059.html
// bullets: http://indianapolis.craigslist.org/acc/2867115357.html
// bullets: http://indianapolis.craigslist.org/ofc/2885697780.html
// bullets: http://indianapolis.craigslist.org/ofc/2887554512.html
// copyright: http://chicago.craigslist.org/nwc/acc/2854640931.html

但是当我使用 Android WebView 时,我得到“三角形内的问号”:

web.loadDataWithBaseURL(null, myHtml, null, "UTF-8", null);

我应该使用不同的编码吗?

我是否应该自己搜索/替换某些字符... 1×1?

【问题讨论】:

  • UTF-8 很好,如果您使用的是 android 4.0,我遇到了 loadDataWithBaseURL 问题,请尝试使用 loadData
  • loadData() 更糟。它甚至无法正确显示一些引号和撇号。
  • 我不能要求 OS 4.0。它仅在世界上极少数的设备上使用。我正在针对 v4.0.3 进行编译,但只需要 v2.2。不过,同样的问题。

标签: android encoding character-encoding webview html-escape-characters


【解决方案1】:

尝试使用 WebView 设置

myWebView = (WebView)findViewById(R.id.mywebView);
WebSettings settings = myWebView.getSettings();
settings.setDefaultTextEncodingName("UTF-8");

【讨论】:

  • Setting UTF-8 with WebSettings,似乎和使用loadDataWithBaseURL()有同样的问题:Can't display bullets.
【解决方案2】:

我以前遇到过这个问题。在将其加载到 WebView 之前,我会确保您的 myHtml 字符串已经具有良好的编码。您可以通过使用 Log.d() 记录它来检查它。如果该字符串中的编码错误,则它也不会在 WebView 中正确显示。你会在 LogCat 中看到那些奇怪的字符。

如果是这种情况,您需要确保在将数据读入 myHtml 字符串时,使用 InputStreamReader 之类的东西并将其作为字符编码传递给“UTF-8”。

我会更改您正在使用的代码行:

BufferedReader buffer = new BufferedReader(new InputStreamReader(content), 1000);

到:

BufferedReader buffer = new BufferedReader(new InputStreamReader(content, "UTF-8"), 1000);

此版本的构造函数记录在:

在 InputStream in 上构造一个新的 InputStreamReader。用于将字节解码为字符的字符转换器由 enc 的名称标识。如果找不到编码,则抛出 UnsupportedEncodingException 错误。

http://developer.android.com/reference/java/io/InputStreamReader.html 并查看第二个。

编辑:如果这不起作用,您可以尝试使用:

String s = EntityUtils.toString(entity, HTTP.UTF_8);

来自Android Java UTF-8 HttpClient Problem

【讨论】:

  • LogCat 显示一个小的“盒子”字符......但这可能是因为我在那里使用的字体。仍然不确定解决方案是什么。
  • 那个“box”字符是一个ascii 149。所以我想我可以做一个replaceAll()......然后做所有的版权字符,商标标志等。但是浪费了资源。
  • 我添加了一些代码来进一步帮助您。您可以通过该代码使用指定编码来避免执行 replaceAll()。
  • 即使在 InputStreamReader 级别使用 UTF-8... 仍然会看到项目符号和某些字符的“黑色三角形内的问号”。
  • 很抱歉,最初的答案没有奏效。我认为你得到的 HTTP 响应不同。我调查了一下,发现了一个潜在的替代代码答案。
猜你喜欢
  • 1970-01-01
  • 2014-06-03
  • 2018-06-04
  • 2020-07-13
  • 2011-08-31
  • 2012-07-15
  • 2012-08-08
  • 2021-03-14
  • 1970-01-01
相关资源
最近更新 更多