2012-07-03 58 views
3

我想將Windows-1250編碼的html頁面加載到webview中。其實我不喜歡,但我必須。這種編碼的例子可以在here找到。Android webview顯示windows-1250字符集問題html

我可以在任何PC瀏覽器中看到上面的頁面 - android webview也可以正常顯示頁面。

我需要做的是獲取上述頁面的base64編碼版本,並將其從字符串資源加載到webview中。所以,作爲一個測試,我用this online tool獲得編碼的網頁版本中的Base64,添加一個字符串到我的應用程序,並試圖通過

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

,在HTML資源包含base64編碼的HTML源代碼的加載它一個字符串。你可以看到下面的結果,字符編碼顯然搞砸了。

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

編碼仍然搞砸了,雖然略有不同。

+0

爲什麼'loadDataWithBaseURL()''null'的第一個參數?如果'null'默認爲'about:blank'。你能再次嘗試一下你的真實網址嗎? – 2012-07-08 16:38:03

+0

@HaiBison「你的真實網址」是什麼意思?正如我所提到的,html是一個base64編碼的字符串,我沒有從URL加載它,我將它作爲對SOAP請求的響應。那麼我應該在那裏放置什麼網址? –

+0

對不起,那是我的錯。 (我認爲它是'http:// sandbox.wamped.org/webview.html')。 – 2012-07-09 08:02:17

回答

0

我會選擇第二種方法,首先解碼Base64然後傳遞給WebView。但是你沒有指定Base64解碼數組的編碼。在String構造函數中指出它,它應該工作。

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

不幸的是沒有工作,看到更新的問題 –

0

什麼上編碼的字符串進行下列轉換:

String decoded = new String(encoded.getBytes(), "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見。