Резюме проблемы: при просмотре неанглийских сайтов, которые явно не указывают правильную кодировку символов с помощью UIWebView на iOS, страница не может быть отображена правильно.
Подробное объяснение. Поскольку метод loadRequest:
в UIWebView будет использовать кодировку, указанную в заголовке charset, отправленную с веб-сервера или кодировку, написанную в метатеге HTML, и по умолчанию iso-8859-1 (ну, я я не слишком уверен в этом), когда кодировка не указана, что приводит к неправильному отображению неанглийских сайтов.
Я попытался использовать Google для изменения кодировки, используемой UIWebView, но единственный способ - использовать метод loadData:MIMEType:textEncodingName:baseURL:
для указания имени кодировки.
Однако не рекомендуется использовать loadData:MIMEType:textEncodingName:baseURL:
+ NSURLConnection вместо loadRequest:
, потому что UIWebView не будет вызывать метод делегата webView:shouldStartLoadWithRequest:navigationType:
для фреймов, и даже если мы найдем способ получить уведомление, когда UIWebView загружает фрейм, мы не можем вызывать loadData:MIMEType:textEncodingName:baseURL:
для загрузки содержимого фрейма, потому что он будет загружать фрейм как внешнюю страницу, если мы это сделаем.
Кроме того, я пытался использовать javascript-хак, но кажется, что свойство доступно только для чтения и не может быть изменено.
[webView stringByEvaluatingJavaScriptFromString:@"document.characterSet='utf-8';"];
Другим обходным решением является вставка метатега в HTML и запрос UIWebView на загрузку измененного кода, но проблема с фреймом, упомянутая выше, также применима здесь.
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
Вопрос: Есть ли лучшее решение, которое может изменить кодировку символов на загруженной веб-странице в UIWebView и правильно обрабатывать кадры?