Just My Life & My Work

一看到亂碼就令人傻眼,因為覺得我無法在mobile端解決亂碼問題,不過事實上是可以辦到!

WebView 解決網頁亂碼問題

解決方法很簡單,在載入的時候設定MIMEEncoding為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 解決網頁亂碼問題2

此外關於WebView的scalesPageToFit,若是NO,效果如上圖(無法縮放);若是YES,效果如下圖(可縮放):

WebView 解決網頁亂碼問題3

要想辦法讓縮放功能獨立於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)

  1. […] 參考:[iOS] WebView 解決網頁亂碼問題、POST request using application/x-www-form-urlencoded。 […]

隨意留個言吧:)~

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

標籤雲

%d 位部落客按了讚: