一、前言

一直在用i文库S(https://itunes.apple.com/cn/app/id418102178?mt=8)看txt书籍,有非常逼真的翻页效果,阅读舒适,速度反应一流。

遇到的最大一个问题是,这货对中文的txt格式只支持utf-8,不支持gbk和unicode,可能因为作者是日本开发者的缘故,更新了无数版看起来没有解决的意图。

因此以前下载的txt一旦遇到了非utf-8的,只好在电脑上中转一道,另存为utf-8格式,然后才能传到这个app中。

但是在不想打开电脑或者没有电脑的环境下,就非常不方便了,而目前没有找到在手机上能做类似格式转换的软件。

既然没有找到,自己还有能力写点小程序,就自己写一个吧。

二、几种编码

知乎的这篇提问排名第一的答案其实写的比较清楚了《Windows 记事本的 ANSI、Unicode、UTF-8 这三种编码模式有什么区别?》

简单来说,windows 的记事本中

–  ansi相当于根据语言设置环境对应的编码,如果是中文windows相当于是GBK

– unicode是带有bom的小端序utf-16

– unicode big endian是带有bom的大端序utf-16

– utf8则是带有bom的utf8

bom不严谨的解释可以说是用来识别编码的标记。

“在txt文件开头标签叫BOM,前2-3个字节如果是0xFF 0xFE,是UTF16LE,如果是0xFE 0xFF则UTF16BE,如果是0xEF 0xBB 0xBF,则是UTF-8”

、app思路

据上,对编码大概的思路如下:

首先取出前3个字节(为了容错,需要判断如果不足3个字节的处理),根据前三个字节,判断是否符合上述的三个BOM。

如果符合上述BOM,则如果是带BOM的UTF-8,则不需要转换编码。

如果是大端序或小端序的UTF-16,则以已识别的大端序或小端序读取,然后再用UTF-8格式写入文件。

如果没有检测到BOM,则先后以UTF-8和GB18030尝试读取内容,如果读取成功,则说明是对应的编码,如果读取不成功,则不作处理并提示用户。

剩下的就是文件输入输出的问题了,用iOS的文件交换能力,允许在其他app中调用此app打开txt,以及对转换后的txt允许用其他应用打开,则完成了输入和输出。

四、app

app在这里,收费的。认识我的可以找我要兑换码,不认识的就算了。

TXT转UTF8(https://itunes.apple.com/cn/app/id1122877435

 

If you're new here, you may want to subscribe to my RSS feed. Thanks for visiting!

10,974次阅读 | penddy on 2016-6-12 9:38 | File Under 软件 | 1 Comment -