我写了个简单的文本亚搏体育官网测试工具

当前位置:亚搏体育官网 > 亚搏体育官网 > 我写了个简单的文本亚搏体育官网测试工具
作者: 亚搏体育官网|来源: http://www.chinazhengwu.com|栏目:亚搏体育官网

文章关键词:亚搏体育官网,识别文本

  近日整理自己写的文本编辑器时,觉得不能自动识别文本编码用起来很不方便,亚搏体育官网于是研究了一下文本文件的编码方式,发现如果文件中有BOM(ByteOrderMark)头,那识别起来简单;如果没有BOM头,就没那么好处理了。

  用Google搜索了老半天,自己也苦思冥想,发现大致可以划分为以下几种情况(这里只考虑中英文):

  这个处理起来比较简单,只要识别出各自的编码方式,然后出加以转换就可以了。

  这 种类型的文件如果其中含有Ascii码字符,那也可以用比较简单的方式加以判断:看看文件中是否有为0的字符,如果有,基本上可以认为是UCS2了。当 然,文件中有错,或没有Ascii码字符,那就没法判断了,因为UCS2(UTF-16)用的编码是0x0000-0xFFFF,所以难以从字符特征上来 判断。亚搏体育官网

  此类文件里可能有Ascii字符,也可能有GB2312/GBK/GB18030/Big5的中文字符。单纯从文件上来看,它与没有BOM头的UTF-8编码文件类似,所以必须考虑如何与UTF-8文件区分开来。

  此外,还有不常用的UCS4(UTF-32),这里就不考虑了。GB18030是与GBK兼容的,这里也只考虑它的2字节部分,4字节部分较少用到,不作考虑。

  通过以上分析,可以看出,现在的主要问题是如何区分没有BOM头的UTF-8文件和ANSI文件。进一步,还有如何ANSI文件判断是简体还是繁体的问题。

  以下代码是我想出来的一个猜测文本文件编码的方法,这可是原创哦(代码是Delphi的):

  看出来了吗?这个函数利用UTF-8的编码特征和GB/Big5的编码范围,再加上权值,来判断是UTF-8还是ANSI文档(UCS2(UTF-16)的判断只是附带的,可能也不是很准确)。

  以我的测试来看,用这种方法可以比较准确地区分UTF-8和ANSI编码的文件。

  TryToDistinguishGBOrBig5函数的调用,相比较而言,这个函数的实现才是一个高潮部分,哈。

  如果你在网上搜索,如何判断文档是GB还是Big5,估计你得到的最靠谱的答案是:利用常用词库。我也曾想过用这种方法,结果一查,好家伙,常用词库少说也得好几万个,亚搏体育官网如果加上现在层出不穷的网络词语,估计光是词库就够忙一阵的了。

  不 知道在哪个ActionScript的论坛上,我看到一个建议,说是先将文本尝试着转换一下,但也就一句话,具体怎么做还是没答案。我尝试了一些方法之 后,忽然想到:在简体中文系统下,是否可以将文本先转换成繁体,然后再转回成简体,再分析转换前后有什么不同,如果不同的地方超过一定比例,则认为是繁 体,否则就是简体?立即动手写了一些代码,就是上述的

  ExactCompare是一个单元内的全局变量,用于适应不同简繁体转换函数。

  可能是史上最强的判断GB/Big5编码的方法诞生了!也许这个方法早就有人发现了,只是没公布出来。用这个方法,我写了个简单的文本测试工具,将我手头能找到的GB/Big5文件找出来试了,还没发现不能识别的呢。

  当然,这个方法只是取文件开头的一部分(默认是4K)来作样本,所以并不能识别所有文件,不过,对通常的应用足够了。

  4.将“商户单号”填入下方输入框,点击“恢复VIP特权”,等待系统校验完成即可。

  4.将“商家订单号”填入下方输入框,点击“恢复VIP特权”,等待系统校验完成即可。

网友评论

我的2016年度评论盘点
还没有评论,快来抢沙发吧!