iOS中解碼.txt文件在UIWebView出現(xiàn)中文亂碼的問題

1陨倡,什么是gbk和utf-8編碼?
2许布,GBK與UTF-8的區(qū)別兴革?

1,GBK的文字編碼是雙字節(jié)來表示的,即不論中杂曲、英文字符均使用雙字節(jié)來表示庶艾,只不過為區(qū)分中文,將其最高位都定成1擎勘。

至于UTF-8編碼則是用以解決國際上字符的一種多字節(jié)編碼咱揍,它對英文使用8位(即一個字節(jié)),中文使用24位(三個字節(jié))來編碼棚饵。對于英文字符較多的論壇則用UTF-8節(jié)省空間煤裙。

2,GBK包含全部中文字符噪漾;
UTF8是國際編碼硼砰,它的通用性比較好,UTF-8則包含全世界所有國家需要用到的字符欣硼。
GBK是國家編碼题翰,通用性比UTF8差,不過UTF8占用的數(shù)據(jù)庫比GBK大~

GB2312是GBK的子集诈胜,GBK是GB18030的子集
GBK是包括中日韓字符的大字符集合
支持就能正常觀看你的文字而不會出現(xiàn)亂碼豹障。

用UIWebview打開txt文件有時候會出現(xiàn)亂碼的情況,這種情況應(yīng)該是txt的編碼問題耘斩,解決方案如下:

webview打開網(wǎng)頁有這三個方法:

- (void)loadRequest:(NSURLRequest *)request;
- (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL;
- (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)textEncodingName baseURL:(NSURL *)baseURL;

baseUrl是什么沼填?
也就是data中有一些鏈接是圖片,css都是外部文件括授,然后這些文件需要到一個目錄上去找坞笙。baseUrl就是這個目錄。

1荚虚,設(shè)置baseUrl
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0] ;
//根據(jù)自己的具體情況設(shè)置薛夜,我的html文件在document目錄,鏈接也是在這個目錄上開始
NSURL *baseUrl = [NSURL fileURLWithPath:documentsDir];

2版述,MIMEType的黑魔法梯澜?
既文件的指定類型。

UTI和MIME的概念


uti.png

同一類型標(biāo)識符(Uniform Type Identifier,UTI)代表IOS信息共享的中心組件渴析⊥砘铮可以把它看成下一代的MIME類型。UTI是標(biāo)識資源類型(比如圖像和文本)的字符串俭茧,他們制定哪些類型的信息將用于公共數(shù)據(jù)對象咆疗,他們不需要依賴于老式的指示符,比如文件擴展名母债,MIME類型午磁,或者文件類型的元數(shù)據(jù)尝抖。

MIME(Multipurpose Internet Mail Extensions)多用途互聯(lián)網(wǎng)郵件擴展類型。是設(shè)定某種擴展名的文件用一種應(yīng)用程序來打開的方式類型迅皇,當(dāng)該擴展名文件被訪問的時候昧辽,瀏覽器會自動使用指定應(yīng)用程序來打開。多用于指定一些客戶端自定義的文件名登颓,以及一些媒體文件打開方式搅荞。

  //后綴名字符串轉(zhuǎn)化為UTI字符串
   CFStringRef UTI =         UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, fileExtension, NULL);

  //使用UITypeCopyPreferredTagWithClass(),是UTI字符串轉(zhuǎn)化為后綴擴展名,這里是轉(zhuǎn)換UTI字符串轉(zhuǎn)化為MIME類型
   CFStringRefmimeType = UTTypeCopyPreferredTagWithClass(UTI, kUTTagClassMIMEType);

  //釋放
            CFRelease(UTI);
            CFBridgingRelease(mimeType);

3,編碼類型(textEncodingName)
@"GBK" 既gbk編碼方式
@"utf-8" 既utf-8編碼方式

前兩種方法實現(xiàn)中文解碼如下:
- (void)loadRequest:(NSURLRequest *)request;
- (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL;

txt分帶編碼和不帶編碼兩種挺据,帶編碼的如UTF-8格式txt取具,不帶編碼的如ANSI格式txt。帶編碼的用NSString的stringWithContentsOfFile可讀出扁耐,不帶的暇检,我們依次嘗試GBK和GB18030編碼。

          NSStringEncoding *useEncoding = nil;
          NSString *urlString = [NSString stringWithContentsOfFile:[self.file fileDataLocalPath] encoding:useEncoding error:nil];

  //按gbk的方式解碼婉称;
          if (urlString) {
          urlString = [NSString stringWithContentsOfFile:[self.file fileDataLocalPath] encoding:0x80000632 error:nil];
}  
    if (urlString) {
    //將解碼的貼到webview上
          [self.previewWebView loadHTMLString:urlString baseURL:nil];
} else {
    //如果gbk解碼不成功块仆,嘗試utf-8解碼,NSUTF8StringEncoding
          urlString = [urlString stringByAddingPercentEscapesUsingEncoding:0x80000632];
          NSURL *requesurl = [NSURL URLWithString:urlString];
          NSURLRequest *request = [NSURLRequest requestWithURL:requesurl];
    //用第一種方式加載
          [self.previewWebView loadRequest:request];
}


            第三種方式:
                //同一類型標(biāo)識符
        CFStringRef UTI =   UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, fileExtension, NULL);
        CFStringRef mimeType = UTTypeCopyPreferredTagWithClass(UTI, kUTTagClassMIMEType);
        CFRelease(UTI);
        CFBridgingRelease(mimeType);

          //GBK解碼
          [self.previewWebView loadData:previewData MIMEType:(__bridge NSString *)(mimeType) textEncodingName:@"GBK" baseURL:nil];

iOS中utf-8國際通用編碼有時會出現(xiàn)亂碼情況王暗,用gbk國家編碼可以很好支持中文編碼悔据。
如果應(yīng)用在國內(nèi)gbk編碼的方式基本通用,但是國外受環(huán)境限制易造成亂碼俗壹,utf全球通用有時會出現(xiàn)本地支持不好情況科汗;

出現(xiàn)亂碼的原因在于使用編碼的不同環(huán)節(jié)之間支持的編碼不一樣。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末绷雏,一起剝皮案震驚了整個濱河市头滔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌涎显,老刑警劉巖坤检,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異期吓,居然都是意外死亡早歇,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門讨勤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來箭跳,“玉大人,你說我怎么就攤上這事潭千⌒坡耄” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵脊岳,是天一觀的道長。 經(jīng)常有香客問我,道長割捅,這世上最難降的妖魔是什么奶躯? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮亿驾,結(jié)果婚禮上嘹黔,老公的妹妹穿的比我還像新娘。我一直安慰自己莫瞬,他們只是感情好儡蔓,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布买喧。 她就那樣靜靜地躺著箩张,像睡著了一般稚机。 火紅的嫁衣襯著肌膚如雪民宿。 梳的紋絲不亂的頭發(fā)上何荚,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天论悴,我揣著相機與錄音移层,去河邊找鬼漠酿。 笑死拐袜,一個胖子當(dāng)著我的面吹牛吉嚣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蹬铺,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼尝哆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了甜攀?” 一聲冷哼從身側(cè)響起秋泄,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赴邻,沒想到半個月后印衔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡姥敛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年奸焙,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片彤敛。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡与帆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出墨榄,到底是詐尸還是另有隱情玄糟,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布袄秩,位于F島的核電站阵翎,受9級特大地震影響逢并,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜郭卫,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一砍聊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧贰军,春花似錦玻蝌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至贰盗,卻和暖如春许饿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背童太。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工米辐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人书释。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓翘贮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親爆惧。 傳聞我的和親對象是個殘疾皇子狸页,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 編碼問題一直困擾著開發(fā)人員,尤其在 Java 中更加明顯扯再,因為 Java 是跨平臺語言芍耘,不同平臺之間編碼之間的切換...
    x360閱讀 2,480評論 1 20
  • 主要內(nèi)容 1. 字符編碼理論簡述 本文主要是圍繞Web開發(fā)中涉及到的中文編碼這一常見問題展開,包括了對字符編碼基礎(chǔ)...
    topgunviper閱讀 13,322評論 5 28
  • 為什么要編碼 不知道大家有沒有想過一個問題熄阻,那就是為什么要編碼斋竞?我們能不能不編碼?要回答這個問題必須要回到計算機是...
    艾小天兒閱讀 17,320評論 0 2
  • Btrace在github上對自己的介紹是: Btrace是一款利用了Java動態(tài)織入技術(shù)來追蹤已經(jīng)部署在線上的應(yīng)...
    whthomas閱讀 667評論 0 3
  • 我們大概都不懂永遠(yuǎn)秃殉,永遠(yuǎn)既不是回憶的過去坝初,也不是憧憬的未來,而是和你在一起的現(xiàn)在钾军。對于感情鳄袍,年少時,我們開始的無所...
    阿東咚咚咚閱讀 253評論 0 1