Office中国论坛/Access中国论坛

标题: 代码分享!utf-8转换兼大文本读取 [打印本页]

作者: duzili    时间: 2008-11-28 19:38
标题: 代码分享!utf-8转换兼大文本读取
我有很多个定宽文本,是utf-8编码的,导入access时 存在两个问题,一是中文显示乱码(导入时选择utf-8也不行),二是中文后面的字段错位,不知道有哪位高人帮帮忙?
数据结构:
字段名称    长度
地区号        5
种类       3
名称        忘了,中文的
类型       1
数量       3

[ 本帖最后由 duzili 于 2008-12-1 21:33 编辑 ]
作者: tmtony    时间: 2008-11-29 11:01
中文乱码的现象,可试试先将UTF转成Ascii码再导入
作者: duzili    时间: 2008-12-1 22:03
标题: 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码,如果小于零,则在汉字后面加一个空格,虽然难看一些,但长度总算对了。

代码如下:

[attach]33616[/attach]
作者: duzili    时间: 2008-12-2 17:16
没有人顶,自己顶一个
作者: tarfull    时间: 2010-4-8 15:39
看看




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3