如我上一篇文章记录,我加了打开其他APPtxt文件的小功能,紧接着碰到新问题了,我在测试过程中发现用户上传的TXT编码格式很多不单单是utf-8和gb2312,针对TXT文档进行解码,我一共经历过两个阶段,如下

1.通过循环 解码不为空就返回字符串

  1. NSArray *encodings = @[
  2. @(NSUTF8StringEncoding),
  3. @(0x80000632),
  4. @(0x80000631),
  5. @(kCFStringEncodingGB_2312_80),
  6. @(kCFStringEncodingHZ_GB_2312),
  7. @(kCFStringEncodingMacChineseSimp),
  8. @(kCFStringEncodingDOSChineseSimplif),
  9. @(kCFStringEncodingGB_18030_2000),
  10. @(NSUTF16StringEncoding),
  11. @(NSUTF16LittleEndianStringEncoding),
  12. @(NSUTF16BigEndianStringEncoding),
  13. @(NSUTF32StringEncoding),
  14. @(NSUTF32LittleEndianStringEncoding),
  15. @(NSUTF32BigEndianStringEncoding)
  16. ];
  17. NSString *result = nil;
  18. for (NSInteger i = 0; i < encodings.count; i++) {
  19. unsigned int encoding = [encodings[i] unsignedIntValue];
  20. NSError *error = nil;
  21. NSString *content = [NSString stringWithContentsOfFile:filePath encoding:CFStringConvertEncodingToNSStringEncoding(encoding) error:&error];
  22. if (!error && !TJIsEmptyObject(content)) {
  23. result = content;
  24. break;
  25. }
  26. }
  27. return result;

此版本对于代码会碰到 编码成功 但是会是乱码的情况。

2.第二阶段 通过encodingOptions 进行处理

stringEncodingForData: encodingOptions: convertedString: usedLossyConversion 会自动挑选编码数组内合适的编码对字符串进行处理,目前尚未发现问题

  1. NSArray *encodings = @[
  2. @(NSUTF8StringEncoding),
  3. @(0x80000632),
  4. @(0x80000631),
  5. @(CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_2312_80)),
  6. @(CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingHZ_GB_2312)),
  7. @(CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingMacChineseSimp)),
  8. @(CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingDOSChineseSimplif)),
  9. @(CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000)),
  10. @(NSUTF16StringEncoding),
  11. @(NSUTF16LittleEndianStringEncoding),
  12. @(NSUTF16BigEndianStringEncoding),
  13. @(NSUTF32StringEncoding),
  14. @(NSUTF32LittleEndianStringEncoding),
  15. @(NSUTF32BigEndianStringEncoding)
  16. ];
  17. NSData * data = [NSData dataWithContentsOfFile:filePath];
  18. NSString * chapterContent = @"";
  19. BOOL lossy = NO;
  20. [NSString stringEncodingForData:data
  21. encodingOptions:@{NSStringEncodingDetectionSuggestedEncodingsKey:encodings}
  22. convertedString:&chapterContent usedLossyConversion:&lossy];
  23. return chapterContent;

附上APP地址: 一阅阅读

有想看小说的小伙伴可以试下 支持换源 支持自定义书源

iOS 针对txt文档进行解码的更多相关文章

  1. WebService 实现BS环境与BS环境传递参数,根据参数生成txt文档

    客户端: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Client.as ...

  2. 用C++向一个txt文档中写数据

    bool CMaked::WriteFileMake(CString filePath, const char *isChange) { ofstream file; //filePath为该txt文 ...

  3. C# 将内容写入txt文档

    <1>  FileStream fs = new FileStream(@"D:\text.txt", FileMode.Append); StreamWriter s ...

  4. QTP操作txt文档

    QTP可以在txt文件(文本文件中读取数据) 首先创造一个文档对象 set fso = createObject("scripting.filesystemobject") 然后用 ...

  5. 利用IDL将一个txt文档拆分为多个

    测试.txt文档,每47行的格式相同,通过代码每47行存为一个txt,txt文档命名为其第一行数据. 代码如下: file='G:\data\测试.txt' openr,lun,file,/Get_L ...

  6. 用matlab查找txt文档中的关键字,并把关键字后面的数据存到起来用matlab处理

    用matlab查找txt文档中的关键字,并把关键字后面的数据存到起来用matlab处理 我测了一组数据存到txt文件中,是个WIFI信号强度文档,里面有我们需要得到的数据,有没用的数据,想用matla ...

  7. 将txt文档按行分割

    昨天遇到了一个需求,需要将txt文档按行分割,并指定了行数, 最近在用python,就在网上搜了一下,在参考了http://blog.csdn.net/zhang_red/article/detail ...

  8. 一个简易的Python爬虫,将爬取到的数据写入txt文档中

    代码如下: import requests import re import os #url url = "http://wiki.akbfun48.com/index.php?title= ...

  9. 提取一个txt 文档中含指定字符串的所有行

    将一个txt 文档中含指定字符串内容的所有行提取出来并保存至新的txt文档中 例如,要提取 1.txt 中所有包含”aaa” 的行的内容 只需在此文件夹中新建一个bat文件,输入以下代码,双击运行,便 ...

随机推荐

  1. 013.Python的文件操作

    一 文件操作 fp = open("打开的文件",mode="模式选择",encoding="编码集") open 函数 返回一个文件io对 ...

  2. component: resolve => require(['../pages/home.vue'], resolve)-装载

    import Vue from 'vue'import VueRouter from 'vue-router'// "@"相当于".."import Detai ...

  3. Linux 用户管理_用户相关配置文件详解

    linux的用户管理 linux支持多个用户同时使用同一个用户登陆系统,windows在修改组策略的情况下,也可以多个人使用同一个用户登陆. 远程连接Linux的方式:ssh 远程连接windows的 ...

  4. Python+Selenium自动化-定位一组元素,单选框、复选框的选中方法

    Python+Selenium自动化-定位一组元素,单选框.复选框的选中方法   之前学习了8种定位单个元素的方法,同时webdriver还提供了8种定位一组元素的方法.唯一区别就是在单词elemen ...

  5. Jmeter 录制 https协议是出现“您访问的不是安全链接”提示时

    解决方法参考: https://blog.csdn.net/test_leader/article/details/112274549

  6. SystemML大规模机器学习,优化算子融合方案的研究

    SystemML大规模机器学习,优化算子融合方案的研究 摘要 许多大规模机器学习(ML)系统允许通过线性代数程序指定定制的ML算法,然后自动生成有效的执行计划.在这种情况下,优化的机会融合基本算子的熔 ...

  7. 什么是OpenMAX技术分析OpenMAX

    什么是OpenMAX技术分析OpenMAX OpenMAX是统一的抽象层,它允许访问否则需要供应商特定API的硬件. Broadcom的MMAL(多媒体抽象层API). 因此,OpenMAX允许使用此 ...

  8. C++标准模板库(STL)——map常见用法详解

    map的定义 map<typename1, typename2> mp; map需要确定映射前类型和映射后类型,所以需要在<>内填写两个类型,第一个是键的类型,第二个是值的类型 ...

  9. BlazorCharts 原生图表库的建设历程

    作者:陈超超 Ant Design Blazor 项目贡献者,拥有十多年从业经验,长期基于.Net技术栈进行架构与开发产品的工作,现就职于正泰集团. 邮箱:timchen@live.com 欢迎各位读 ...

  10. spring如何集成第三方框架? 比如mybatis

    实体Bean的创建: 1: 基于class构建, 2: 构造方法构建 3: 静态工厂方法创建 4: FactoryBean构建 spring如何集成第三方框架? 比如mybatis 在mybatis中 ...