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地址: 一阅阅读
有想看小说的小伙伴可以试下 支持换源 支持自定义书源
iOS 针对txt文档进行解码的更多相关文章
- WebService 实现BS环境与BS环境传递参数,根据参数生成txt文档
客户端: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Client.as ...
- 用C++向一个txt文档中写数据
bool CMaked::WriteFileMake(CString filePath, const char *isChange) { ofstream file; //filePath为该txt文 ...
- C# 将内容写入txt文档
<1> FileStream fs = new FileStream(@"D:\text.txt", FileMode.Append); StreamWriter s ...
- QTP操作txt文档
QTP可以在txt文件(文本文件中读取数据) 首先创造一个文档对象 set fso = createObject("scripting.filesystemobject") 然后用 ...
- 利用IDL将一个txt文档拆分为多个
测试.txt文档,每47行的格式相同,通过代码每47行存为一个txt,txt文档命名为其第一行数据. 代码如下: file='G:\data\测试.txt' openr,lun,file,/Get_L ...
- 用matlab查找txt文档中的关键字,并把关键字后面的数据存到起来用matlab处理
用matlab查找txt文档中的关键字,并把关键字后面的数据存到起来用matlab处理 我测了一组数据存到txt文件中,是个WIFI信号强度文档,里面有我们需要得到的数据,有没用的数据,想用matla ...
- 将txt文档按行分割
昨天遇到了一个需求,需要将txt文档按行分割,并指定了行数, 最近在用python,就在网上搜了一下,在参考了http://blog.csdn.net/zhang_red/article/detail ...
- 一个简易的Python爬虫,将爬取到的数据写入txt文档中
代码如下: import requests import re import os #url url = "http://wiki.akbfun48.com/index.php?title= ...
- 提取一个txt 文档中含指定字符串的所有行
将一个txt 文档中含指定字符串内容的所有行提取出来并保存至新的txt文档中 例如,要提取 1.txt 中所有包含”aaa” 的行的内容 只需在此文件夹中新建一个bat文件,输入以下代码,双击运行,便 ...
随机推荐
- 013.Python的文件操作
一 文件操作 fp = open("打开的文件",mode="模式选择",encoding="编码集") open 函数 返回一个文件io对 ...
- component: resolve => require(['../pages/home.vue'], resolve)-装载
import Vue from 'vue'import VueRouter from 'vue-router'// "@"相当于".."import Detai ...
- Linux 用户管理_用户相关配置文件详解
linux的用户管理 linux支持多个用户同时使用同一个用户登陆系统,windows在修改组策略的情况下,也可以多个人使用同一个用户登陆. 远程连接Linux的方式:ssh 远程连接windows的 ...
- Python+Selenium自动化-定位一组元素,单选框、复选框的选中方法
Python+Selenium自动化-定位一组元素,单选框.复选框的选中方法 之前学习了8种定位单个元素的方法,同时webdriver还提供了8种定位一组元素的方法.唯一区别就是在单词elemen ...
- Jmeter 录制 https协议是出现“您访问的不是安全链接”提示时
解决方法参考: https://blog.csdn.net/test_leader/article/details/112274549
- SystemML大规模机器学习,优化算子融合方案的研究
SystemML大规模机器学习,优化算子融合方案的研究 摘要 许多大规模机器学习(ML)系统允许通过线性代数程序指定定制的ML算法,然后自动生成有效的执行计划.在这种情况下,优化的机会融合基本算子的熔 ...
- 什么是OpenMAX技术分析OpenMAX
什么是OpenMAX技术分析OpenMAX OpenMAX是统一的抽象层,它允许访问否则需要供应商特定API的硬件. Broadcom的MMAL(多媒体抽象层API). 因此,OpenMAX允许使用此 ...
- C++标准模板库(STL)——map常见用法详解
map的定义 map<typename1, typename2> mp; map需要确定映射前类型和映射后类型,所以需要在<>内填写两个类型,第一个是键的类型,第二个是值的类型 ...
- BlazorCharts 原生图表库的建设历程
作者:陈超超 Ant Design Blazor 项目贡献者,拥有十多年从业经验,长期基于.Net技术栈进行架构与开发产品的工作,现就职于正泰集团. 邮箱:timchen@live.com 欢迎各位读 ...
- spring如何集成第三方框架? 比如mybatis
实体Bean的创建: 1: 基于class构建, 2: 构造方法构建 3: 静态工厂方法创建 4: FactoryBean构建 spring如何集成第三方框架? 比如mybatis 在mybatis中 ...