如何在UIWebView中更改字符编码?

how*_*ghk 22 iphone character-encoding uiwebview ios

问题摘要:在iOS上浏览未使用UIWebView显式指定正确字符编码的非英语网站时,页面无法正确显示.

详细说明:由于loadRequest:UIWebView中的方法将使用从Web服务器发送的charset头中指定的编码或HTML元标记中编写的charset,并默认为iso-8859-1(好吧,我对此不太了解)当没有指定charset时,导致非英文网站无法正常显示.

我曾尝试过谷歌改变UIWebView使用的字符集的方法,但唯一的方法是使用该loadData:MIMEType:textEncodingName:baseURL:方法来指定编码名称.

但是,使用loadData:MIMEType:textEncodingName:baseURL:+ NSURLConnection代替它并不是一个好主意loadRequest:,因为UIWebView不会调用webView:shouldStartLoadWithRequest:navigationType:框架的委托方法,即使我们找到了一种在UIWebView加载框架时得到通知的方法,我们也无法调用loadData:MIMEType:textEncodingName:baseURL:加载框架内容,因为如果我们这样做,它将加载框架作为外部页面.

此外,我曾尝试使用javascript hack,但似乎该属性是只读的,无法更改.

[webView stringByEvaluatingJavaScriptFromString:@"document.characterSet='utf-8';"];  
Run Code Online (Sandbox Code Playgroud)

另一种解决方法是将元标记插入HTML,并要求UIWebView加载修改后的代码,但上面提到的框架问题也适用于此处.

<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
Run Code Online (Sandbox Code Playgroud)

问题:是否有更好的解决方案可以更改UIWebView中加载的网页中的字符编码,并正确处理框架?

Sim*_*ide 6

您可以通过手动加载HTML,修改它,然后将修改后的内容加载到UIWebView中来完成此操作.

  • 手动将HTML从不包含元标记的页面加载到字符串中(例如使用NSURLConnection)
  • 使用字符串操作,将适当的编码元标记插入到手动加载的HTML中
  • 使用将Web视图中的HTML设置为修改后的字符串 loadHTMLString:

现在,这将适用于不包含链接的网页.如果它包含链接,那么您会发现在点击链接后,新页面将不会进行修改.因此,您需要手动拦截所有点击.这是你如何做到这一点: