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

    本博文由博主根据资料或其他优秀博文整理而成,转载请注明出处,谢谢!
  • 相关阅读:
    Java 代码界 3% 的王者?看我是如何解错这 5 道题的
    你想成为什么级别的程序员?
    我竟然不再抗拒 Java 的类加载机制了
    程序员,你自豪什么
    你竟然没用 Maven 构建项目?
    一名合格的程序员应该是什么样子
    TDD(测试驱动开发)死了吗?
    Java Serializable:明明就一个空的接口嘛
    一个理想主义的程序员
    教妹学 Java:动态伴侣 Groovy
  • 原文地址:https://www.cnblogs.com/Apolla/p/14995105.html
Copyright © 2011-2022 走看看