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

EDIT 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 に答える