|
3#
楼主 |
发表于 2008-12-1 22:03:16
|
只看该作者
utf-8转换兼大文本读取
关于utf-8文本的转换,以前也碰到过,但次数很少,就用sql 3005转换一下就行了。这次文本数量太多,sql编程还是太麻烦,自己也不是很熟悉,搞得我彻底崩溃了。
于是下定决心要好好整一整这个utf-8。在网上搜啊搜,终于搜索到一篇好文章:
http://www.yuanma.org/data/2007/0202/article_2224.htm
该文章给出了一段代码,完全用vb实现,没有用到api。我试了一下,对小文本还是很准确的,但是我的文本动则上百兆,这个速度,简直是.......,而且如果文本如果过大,直接跳出了。
随后又看到有人用MultiByteToWideChar进行转换的,有很多代码,但是转换后错误很多,主要是bye计算不准确,转换错误。
下面的文章给我启发很大:
http://topic.csdn.net/u/20070725/11/2a400222-1391-485d-992d-7984b68f711e.html?1832232430
最终实现的方式是:
用Binary方式打开,文本一次读入一定量的数据到内存,并修正到读到换行符,然后利用MultiByteToWideChar转换成Unicode。
然后使用fso对象将已经转换好的文本写入新的文本文件,再进行下一批数据处理。(之所以用fso对象,是因为 open打开文本写入的话,,每一次Print后,会产生一个多余的空行)
对定宽文本长度错误的问题,是因为utf-8是使用三个字节存储一个汉字的,而Unicode是两个字节,所以汉字后面的字符全部错位了。如果给每个汉字后面补一个空格,长度就没有问题了。通过判断每一个字符的ascii码,如果小于零,则在汉字后面加一个空格,虽然难看一些,但长度总算对了。
代码如下:
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|