世界上的字符编码多得眼花缭乱,而且绝大部分都是不定长的编码。要跳到一个巨大文本文件的第n个字符就必须从0开始一个一个地分析字符,数到n为止;又或者整个文件导入,让系统把文件里的数据转成string,再在string里获得第n个字符。
不过,本文也没法解决上面那个问题,上面只是想说明据我所知,把文本文件转成字符串的方法只有:
- 一个一个分析,分析一段后让系统API转成字符串;
- 整个文件导入,转成字符串的工作让API来完成。
第一种方法非常复杂,我想也没有很多人认识所有字符编码;第二种方法遇到巨大的文件的时候非常耗内存。
前几天我想到了一个折中的方法,它可以一小段一小段地读入文本,利用的是文本里的特殊字符。方法如下:
首先要知道文本的编码(这里以SHIFT-JIS为例),除了UTF8和有BOM的文本,其余的一般很难能够直接从文本里分析出它的编码。
还要知道文本的特征,比如是小说的话肯定会有换行符(这里以换行符为例)。
获得换行符用SHIFT-JIS表示的bytes。
用binary的方式读入文件,遇到换行符的bytes就截断(太短的话还可以稍微改进一下),把获得的那一串字节用系统API转换成字符串。 重复这个步骤,读到不想读为止。
`