【发布时间】:2011-02-11 19:18:42
【问题描述】:
问题总结: 在iOS上浏览没有用UIWebView明确指定正确字符编码的非英文网站时,页面无法正确显示。
详解:由于UIWebView中的loadRequest:方法会使用web服务器发送的charset header中指定的编码或者HTML meta标签中写入的charset,默认为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 hack,但似乎该属性是只读的,无法更改。
[webView stringByEvaluatingJavaScriptFromString:@"document.characterSet='utf-8';"];
另一种解决方法是在 HTML 中插入一个 meta 标签,并要求 UIWebView 加载修改后的代码,但上面提到的框架问题在这里也适用。
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
问题:有没有更好的解决方案可以在UIWebView中改变加载网页中的字符编码,并正确处理帧?
【问题讨论】:
-
请在此处提供您的网址,然后让我检查。
-
你对网页或服务器有控制权吗?
-
@magnus 太容易了 ;)
标签: iphone ios character-encoding uiwebview