zoukankan      html  css  js  c++  java
  • 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地址: 一阅阅读
    有想看小说的小伙伴可以试下 支持换源 支持自定义书源

    本博文由博主根据资料或其他优秀博文整理而成,转载请注明出处,谢谢!
  • 相关阅读:
    680. Valid Palindrome II【easy】
    125. Valid Palindrome【easy】
    459. Repeated Substring Pattern【easy】
    2. Trailing Zeros【easy】
    142. O(1) Check Power of 2【easy】
    181. Flip Bits【easy】
    183.Wood Cut【hard】
    61. Search for a Range【medium】
    关闭微软对win10的推送
    让未激活的win8.1不再跳出提示激活的窗口
  • 原文地址:https://www.cnblogs.com/Apolla/p/14995105.html
Copyright © 2011-2022 走看看