一看到亂碼就令人傻眼,因為覺得我無法在mobile端解決亂碼問題,不過事實上是可以辦到!
解決方法很簡單,在載入的時候設定MIME和Encoding為text/html和UTF-8,就能將web沒做好的部分在mobile顯示時修正。
/** Theme: WebView solve encoding problem IDE: Xcode 6 Language: Objective C Date: 104/07/1 Author: HappyMan Blog: https://cg2010studio.wordpress.com/ */ // 有亂碼問題 -(void)displayWebPage { NSString *urlString = [[NSString alloc] initWithFormat:@"http://...]; url = [NSURL URLWithString:urlString]; NSURLRequest *request= [NSURLRequest requestWithURL:url]; [displayWebView loadRequest:request]; } // 沒有亂碼問題 -(void)displayWebPage { NSString *urlString = [[NSString alloc] initWithFormat:@"http://...]; url = [NSURL URLWithString:urlString]; NSData *data = [NSData dataWithContentsOfURL:url]; [displayWebView loadData:data MIMEType: @"text/html" textEncodingName: @"UTF-8" baseURL:nil]; }
此外關於WebView的scalesPageToFit,若是NO,效果如上圖(無法縮放);若是YES,效果如下圖(可縮放):
要想辦法讓縮放功能獨立於scalesPageToFit之外。
註:關於MIME
多用途網際網路郵件擴展(MIME,Multipurpose Internet Mail Extensions)是一個網際網路標準,它擴展了電子郵件標準,使其能夠支援:
- 非ASCII字符文本;
- 非文本格式附件(二進位、聲音、圖像等);
- 由多部分(multiple parts)組成的消息體;
- 包含非ASCII字符的頭信息(Header information)。
內容類型(Content-Type),這個頭部領域用於指定消息的類型。一般以下面的形式出現。
Content-Type: [type]/[subtype]; parameter
type有下面的形式。
- Text:用於標準化地表示的文本信息,文本消息可以是多種字符集和或者多種格式的;
- Multipart:用於連接消息體的多個部分構成一個消息,這些部分可以是不同類型的數據;
- Application:用於傳輸應用程式數據或者二進位數據;
- Message:用於包裝一個E-mail消息;
- Image:用於傳輸靜態圖片數據;
- Audio:用於傳輸音頻或者音聲數據;
- Video:用於傳輸動態影像數據,可以是與音頻編輯在一起的視頻數據格式。
subtype用於指定type的詳細形式。content-type/subtype配對的集合和與此相關的參數,將隨著時間而增長。為了確保這些值在一個有序而且公開的狀態下開發,MIME使用Internet Assigned Numbers Authority (IANA)作為中心的註冊機制來管理這些值。
常用的subtype值如下所示:
- text/plain(純文本)
- text/html(HTML文檔)
- application/xhtml+xml(XHTML文檔)
- image/gif(GIF圖像)
- image/jpeg(JPEG圖像)【PHP中為:image/pjpeg】
- image/png(PNG圖像)【PHP中為:image/x-png】
- video/mpeg(MPEG動畫)
- application/octet-stream(任意的二進位數據)
- application/pdf(PDF文檔)
- application/msword(Microsoft Word文件)
- application/vnd.wap.xhtml+xml (wap1.0+)
- application/xhtml+xml (wap2.0+)
- message/rfc822(RFC 822形式)
- multipart/alternative(HTML郵件的HTML形式和純文本形式,相同內容使用不同形式表示)
- application/x-www-form-urlencoded(使用HTTP的POST方法提交的表單)
- multipart/form-data(同上,但主要用於表單提交時伴隨文件上傳的場合)
參考:SOHO朋友、WiKi – MIME。
Comments on: "[iOS] WebView 解決網頁亂碼問題" (1)
[…] 參考:[iOS] WebView 解決網頁亂碼問題、POST request using application/x-www-form-urlencoded。 […]
讚讚