WebView.loadData () không hoạt động bình thường. Những gì tôi phải làm là:
String header = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>";
myWebView.loadData(header+myHtmlString, "text/html", "UTF-8");
Tôi nghĩ trong trường hợp của bạn, bạn nên thay thế UTF-8 bằng latin1 hoặc ISO-8859-1 cả trong tiêu đề và trong WebView.loadData ().
Và, để đưa ra câu trả lời đầy đủ, đây là danh sách chính thức của các bảng mã: http://www.iana.org/assignments/character-sets
Tôi cập nhật câu trả lời của mình để bao hàm hơn:
Để sử dụng WebView.loadData () với các mã hóa không phải latin1, bạn phải mã hóa nội dung html. Ví dụ trước đó không hoạt động chính xác trong Android 4+, vì vậy tôi đã sửa đổi nó để trông như sau:
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);
}
Nhưng sau đó tôi đã chuyển sang WebView.loadDataWithBaseURL () và mã trở nên rất sạch và không phụ thuộc vào phiên bản Android:
WebSettings settings = myWebView.getSettings();
settings.setDefaultTextEncodingName("utf-8");
myWebView.loadDataWithBaseURL(null, htmlString, "text/html", "utf-8", null);
Vì một số lý do mà các chức năng này có cách thực hiện hoàn toàn khác nhau.