1. 程式人生 > 其它 >iOS 針對txt文件進行解碼

iOS 針對txt文件進行解碼

如我上一篇文章記錄,我加了開啟其他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地址: 一閱閱讀
有想看小說的小夥伴可以試下 支援換源 支援自定義書源

本博文由博主根據資料或其他優秀博文整理而成,轉載請註明出處,謝謝!