如我上一篇文章记录,我加了打开其他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地址: 一阅阅读

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

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. 绿色版 notepad++ 添加鼠标右键菜单

    建立一个后缀为 .reg 的注册文件,拷贝以下内容并替换相关路径,保存病双击文件运行加入注册表. Windows Registry Editor Version 5.00 [HKEY_CLASSES_ ...

  2. 基于LNMP架构搭建wordpress个人博客

    搭建过程 注意防火墙和selinux的影响可以先关闭. 一.安装nginx # 1.更改nginx源安装nginx [root@web01 ~]# vi /etc/yum.repos.d/nginx. ...

  3. mysql基础之数据库变量(参数)管理

    数据库的数据存放路径:[root@ren7 mysql]# pwd /var/lib/mysql [root@ren7 mysql]# ls aria_log.00000001 ibdata1 mul ...

  4. Day_04_xml解析

    xml解析:操作xml文档,将文档中的数据读取到内存中 操作xml文档的方式有两种: 1.解析(读取):将文档中的数据读取到内存中 2.写入:将内存中的数据保存到xml文档中(后期用的并不多) 解析x ...

  5. 灵动微电子ARM Cortex M0 MM32F0010 Timer定时器中断定时功能的配置

    灵动微电子ARM Cortex M0 MM32F0010 Timer定时器中断定时功能的配置 目录: 1.Timer1高级定时器Timer3通用定时器Timer14基本定时器简介 2.Timer1高级 ...

  6. MySQL next-key lock 加锁范围是什么?

    前言 某天,突然被问到 MySQL 的 next-key lock,我瞬间的反应就是: 这都是啥啥啥??? 这一个截图我啥也看不出来呀? 仔细一看,好像似曾相识,这不是<MySQL 45 讲&g ...

  7. openresty 学习笔记二:获取请求数据

    openresty 学习笔记二:获取请求数据 openresty 获取POST或者GET的请求参数.这个是要用openresty 做接口必须要做的事情.这里分几种类型:GET,POST(urlenco ...

  8. Python保留指定位数的小数

    Python保留指定位数的小数 1 '%.2f' %f 方法(推荐) f = 1.23456 print('%.4f' % f) print('%.3f' % f) print('%.2f' % f) ...

  9. SQL查询要求两个条件同时成立

    SELECT * FROM [TABLE] WHERE CASE WHEN O_State='已处理' AND O_Pay='已付' THEN 0 ELSE 1 END=1

  10. 3DPytorch-API NVIDIA Kaolin

    3DPytorch-API NVIDIA Kaolin NVIDIA Kaolin library provides a PyTorch API for working with a variety ...