设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2893|回复: 4
打印 上一主题 下一主题

[API] 代码分享!utf-8转换兼大文本读取

[复制链接]
跳转到指定楼层
1#
发表于 2008-11-28 19:38:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我有很多个定宽文本,是utf-8编码的,导入access时 存在两个问题,一是中文显示乱码(导入时选择utf-8也不行),二是中文后面的字段错位,不知道有哪位高人帮帮忙?
数据结构:
字段名称    长度
地区号        5
种类       3
名称        忘了,中文的
类型       1
数量       3

[ 本帖最后由 duzili 于 2008-12-1 21:33 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2008-11-29 11:01:12 | 只看该作者
中文乱码的现象,可试试先将UTF转成Ascii码再导入
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
4#
 楼主| 发表于 2008-12-2 17:16:39 | 只看该作者
没有人顶,自己顶一个
5#
发表于 2010-4-8 15:39:25 | 只看该作者
看看
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-4 08:22 , Processed in 0.098009 second(s), 30 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表