3

我想将 Windows-1250 编码的 html 页面加载到 webview 中。其实我不喜欢,但我不得不。可以在此处找到此编码的示例。

我可以在任何 pc 浏览器中很好地看到上面的页面 - android webview 也可以正确显示该页面。

不过,我需要做的是获取上述页面的 base64 编码版本,并将其从 String 资源加载到 webview 中。因此,作为测试,我使用这个在线工具来获取页面的 base64 编码版本,作为字符串添加到我的应用程序中,并尝试通过

myWebView.loadData(htmlResource, "text/html; charset=Windows-1250", "base64");

,其中 htmlResource 包含 base64 编码的 html 源作为字符串。你可以看到下面的结果,字符编码明显搞砸了。

Webview 错误编码 Windows-1250

从 base64 编码的字符串显示此页面的正确方法是什么?

编辑:我也尝试了这种方法,结果相同:

String decodedResource = new String(Base64.decode(htmlResource));
mWebView.loadDataWithBaseURL( null, decodedResource, "text/html", 
    "Windows-1250", null );

编辑 2:我还尝试了 snoblucha 的建议进行以下修改,但仍然没有运气:

try {
    convertedResource =  new String(Base64.decode(htmlResource), "windows-1250");
} catch (UnsupportedEncodingException e) {
    Log.e("UnsupportedEncodingException", e.getMessage());
}
mWebView.loadData(convertedResource, "text/html", "windows-1250");

编码仍然混乱,虽然略有不同。

4

3 回答 3

2

尝试使用此代码:

String html = "Some string in windows-1250"; // Actually string in unicode
String encoded = Base64.encodeToString(html.getBytes("cp1250"), Base64.DEFAULT); // Convert to array of bytes in cp1250 and later to base64 string
webView.loadData(encoded, "text/html; charset=windows-1250", "base64"); // Load to WebView

另请参阅此问题

于 2012-11-06T06:45:45.597 回答
0

如何对编码字符串执行以下转换:

String decoded = new String(encoded.getBytes(), "Windows-1250");
于 2012-07-06T14:09:44.987 回答
0

我会选择第二种方法,首先解码 Base64,然后将其传递给 WebView。但是您没有指定 Base64 解码数组是什么编码。在 String 构造函数中指出它,它应该可以工作。

myWebView.loadData(new String(Base64.decode(htmlResource, Base64.DEFAULT),"windows-1250"), "text/html", "windows-1250");
于 2012-07-03T09:03:05.217 回答