iOS 針對txt文件進行解碼
阿新 • • 發佈:2021-07-10
如我上一篇文章記錄,我加了開啟其他APPtxt檔案的小功能,緊接著碰到新問題了,我在測試過程中發現使用者上傳的TXT編碼格式很多不單單是utf-8和gb2312,針對TXT文件進行解碼,我一共經歷過兩個階段,如下
1.通過迴圈 解碼不為空就返回字串
NSArray *encodings = @[ @(NSUTF8StringEncoding), @(0x80000632), @(0x80000631), @(kCFStringEncodingGB_2312_80), @(kCFStringEncodingHZ_GB_2312), @(kCFStringEncodingMacChineseSimp), @(kCFStringEncodingDOSChineseSimplif), @(kCFStringEncodingGB_18030_2000), @(NSUTF16StringEncoding), @(NSUTF16LittleEndianStringEncoding), @(NSUTF16BigEndianStringEncoding), @(NSUTF32StringEncoding), @(NSUTF32LittleEndianStringEncoding), @(NSUTF32BigEndianStringEncoding) ]; NSString *result = nil; for (NSInteger i = 0; i < encodings.count; i++) { unsigned int encoding = [encodings[i] unsignedIntValue]; NSError *error = nil; NSString *content = [NSString stringWithContentsOfFile:filePath encoding:CFStringConvertEncodingToNSStringEncoding(encoding) error:&error]; if (!error && !TJIsEmptyObject(content)) { result = content; break; } } return result;
此版本對於程式碼會碰到 編碼成功 但是會是亂碼的情況。
2.第二階段 通過encodingOptions 進行處理
stringEncodingForData: encodingOptions: convertedString: usedLossyConversion
會自動挑選編碼陣列內合適的編碼對字串進行處理,目前尚未發現問題
NSArray *encodings = @[ @(NSUTF8StringEncoding), @(0x80000632), @(0x80000631), @(CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_2312_80)), @(CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingHZ_GB_2312)), @(CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingMacChineseSimp)), @(CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingDOSChineseSimplif)), @(CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000)), @(NSUTF16StringEncoding), @(NSUTF16LittleEndianStringEncoding), @(NSUTF16BigEndianStringEncoding), @(NSUTF32StringEncoding), @(NSUTF32LittleEndianStringEncoding), @(NSUTF32BigEndianStringEncoding) ]; NSData * data = [NSData dataWithContentsOfFile:filePath]; NSString * chapterContent = @""; BOOL lossy = NO; [NSString stringEncodingForData:data encodingOptions:@{NSStringEncodingDetectionSuggestedEncodingsKey:encodings} convertedString:&chapterContent usedLossyConversion:&lossy]; return chapterContent;
本博文由博主根據資料或其他優秀博文整理而成,轉載請註明出處,謝謝!附上APP地址: 一閱閱讀
有想看小說的小夥伴可以試下 支援換源 支援自定義書源