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的概念
同一類型標(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é)之間支持的編碼不一樣。