android webview显示windows-1250 charset html的麻烦

时间:2012-07-03 08:30:36

标签: android character-encoding webview

我想将一个Windows-1250编码的html页面加载到webview中。其实我不喜欢,但我必须这样做。可以找到此编码的示例here

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

我需要做的是获取上述页面的base64编码版本,并从String资源加载到webview中。因此,作为测试,我使用this online tool来获取页面的base64编码版本,作为String添加到我的应用程序中,并尝试通过

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

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

Webview wrong encoding Windows-1250

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

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

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");

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

3 个答案:

答案 0 :(得分: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

另见question

答案 1 :(得分:0)

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

myWebView.loadData(new String(Base64.decode(htmlResource, Base64.DEFAULT),"windows-1250"), "text/html", "windows-1250");

答案 2 :(得分:0)

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

String decoded = new String(encoded.getBytes(), "Windows-1250");