我想将一个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。你可以看到下面的结果,字符编码显然搞砸了。
从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");
编码仍然混乱,但略有不同。
答案 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");