WebView.loadData () ทำงานไม่ถูกต้องเลย สิ่งที่ฉันต้องทำคือ:
String header = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>";
myWebView.loadData(header+myHtmlString, "text/html", "UTF-8");
ฉันคิดว่าในกรณีของคุณคุณควรแทนที่ UTF-8 ด้วย latin1 หรือ ISO-8859-1 ทั้งในส่วนหัวและใน WebView.loadData ()
และเพื่อให้คำตอบแบบเต็มนี่คือรายการการเข้ารหัสอย่างเป็นทางการ: http://www.iana.org/assignments/character-sets
ฉันอัปเดตคำตอบให้ครอบคลุมมากขึ้น:
ในการใช้WebView.loadData ()กับการเข้ารหัสที่ไม่ใช่ latin1 คุณต้องเข้ารหัสเนื้อหา html ตัวอย่างก่อนหน้าทำงานไม่ถูกต้องใน Android 4+ ดังนั้นฉันจึงแก้ไขให้มีลักษณะดังนี้:
WebSettings settings = myWebView.getSettings();
settings.setDefaultTextEncodingName("utf-8");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO) {
String base64 = Base64.encodeToString(htmlString.getBytes(), Base64.DEFAULT);
myWebView.loadData(base64, "text/html; charset=utf-8", "base64");
} else {
String header = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>";
myWebView.loadData(header + htmlString, "text/html; charset=UTF-8", null);
}
แต่ต่อมาฉันได้เปลี่ยนเป็นWebView.loadDataWithBaseURL ()และรหัสก็สะอาดมากและไม่ขึ้นอยู่กับเวอร์ชัน Android:
WebSettings settings = myWebView.getSettings();
settings.setDefaultTextEncodingName("utf-8");
myWebView.loadDataWithBaseURL(null, htmlString, "text/html", "utf-8", null);
ด้วยเหตุผลบางประการฟังก์ชันเหล่านี้มีการใช้งานที่แตกต่างกันอย่างสิ้นเชิง