| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1953 人关注过本帖
标题:DBF表导入UTF-8格式文本时的乱码问题
只看楼主 加入收藏
huasinstamps
Rank: 2
等 级:论坛游民
帖 子:60
专家分:24
注 册:2017-6-1
结帖率:88.89%
收藏
已结贴  问题点数:20 回复次数:15 
DBF表导入UTF-8格式文本时的乱码问题
现在win10保存txt文本文件时是默认用UTF-8格式,当DBF表导入UTF-8格式的txt文本时,中文字符都成了乱码。SDF这个参数好像只适用于ANSI格式的文本。

把文本另存为ANSI格式是可以解决乱码问题,但麻烦了点。请教各位老师和前辈,有没有更好的办法。我用的是VFP6。谢谢!
搜索更多相关主题的帖子: 格式 文本 DBF 导入 乱码 
2022-08-09 21:23
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9798
专家分:26886
注 册:2012-2-5
收藏(1)
得分:4 
发上UTF-8格式的txt文本看看

坚守VFP最后的阵地
2022-08-09 22:29
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10538
专家分:42927
注 册:2014-5-20
收藏
得分:4 
转码
数据转码或文件转码
2022-08-10 07:56
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:66
帖 子:1063
专家分:2579
注 册:2015-12-30
收藏
得分:4 
楼上吹版所言极是,遇到乱码可尝试各种可能的转码,测试转码后的文本是否正常,之前我就因为一段文本尝试了各种转换,最终找到了答案
但如果是多次转码的文本就比较麻烦了,需要对不同编码的文本特征有所了解
2022-08-10 13:51
huasinstamps
Rank: 2
等 级:论坛游民
帖 子:60
专家分:24
注 册:2017-6-1
收藏
得分:0 
以下是引用sdta在2022-8-9 22:29:00的发言:

发上UTF-8格式的txt文本看看


就是普通的txt文本,内容是用中文字符,在window10直接保存都是UTF-8格式的。用append sdf导入到dbf表后中文就成了乱码。
图片附件: 游客没有浏览图片的权限,请 登录注册


[此贴子已经被作者于2022-8-10 18:00编辑过]

2022-08-10 17:47
huasinstamps
Rank: 2
等 级:论坛游民
帖 子:60
专家分:24
注 册:2017-6-1
收藏
得分:0 
以下是引用吹水佬在2022-8-10 07:56:09的发言:

转码
数据转码或文件转码


吹老师数据转码的语句是什么
2022-08-10 17:50
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10538
专家分:42927
注 册:2014-5-20
收藏
得分:0 
回复 6楼 huasinstamps
函数 STRCONV()
2022-08-10 18:08
huasinstamps
Rank: 2
等 级:论坛游民
帖 子:60
专家分:24
注 册:2017-6-1
收藏
得分:0 
回复 7楼 吹水佬
这个在vfp6试过不能用,我参考过以前的帖子,据说只在在vfp9中用。
2022-08-10 19:17
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10538
专家分:42927
注 册:2014-5-20
收藏(2)
得分:0 
以下是引用huasinstamps在2022-8-10 19:17:29的发言:

这个在vfp6试过不能用,我参考过以前的帖子,据说只在在vfp9中用。

vfp6的STRCONV()不支持UTF-8转码,可以试试用API或其他脚本写。
API函数:WideCharToMultiByte、MultiByteToWideChar
程序代码:
DECLARE long WideCharToMultiByte IN kernel32 long,long,string,long,string@,long,string@,long
DECLARE long MultiByteToWideChar IN kernel32 long,long,string,long,string@,long
#define CP_UTF8    65001
#define ERROR_NO_UNICODE_TRANSLATION    1113

cUtf8 = AnsiToUtf8("中国")
? Utf8ToAnsi(cUtf8)
RETURN

FUNCTION AnsiToUtf8(cAnsi)
    LOCAL WChar, WCharSize, cUtf8
    WChar = STRCONV(cAnsi+CHR(0),5)
    WCharSize = WideCharToMultiByte(CP_UTF8, 0, WChar, -1, NULL, 0, NULL, 0)
    IF WCharSize==0 OR WCharSize==ERROR_NO_UNICODE_TRANSLATION
        RETURN ""
    ENDIF
    cUtf8 = SPACE(WCharSize)
    IF WideCharToMultiByte(CP_UTF8,0,WChar,-1,@cUtf8,WCharSize,NULL,0) != WCharSize
        RETURN ""
    ENDIF
    RETURN cUtf8
ENDFUNC

FUNCTION Utf8ToAnsi(cUtf8)
    LOCAL WCharSize, buf
    WCharSize = MultiByteToWideChar(CP_UTF8, 0, cUtf8, -1, NULL, 0)
    IF WCharSize==0 OR WCharSize==ERROR_NO_UNICODE_TRANSLATION
        RETURN ""
    ENDIF
    buf = SPACE(WCharSize*2)    && 要足够大
    IF MultiByteToWideChar(CP_UTF8,0,cUtf8,-1,@buf,WCharSize) != WCharSize
        RETURN ""
    ENDIF
    buf = STRCONV(buf,6)
    RETURN LEFT(buf,AT(CHR(0),buf)-1)
ENDFUNC
2022-08-10 21:16
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:347
专家分:326
注 册:2013-10-4
收藏
得分:4 
为什么要重新发明车轮呢?VFP9几乎完全兼容VFP6。
楼主且随手将24年前的老掉牙古董VFP6,换成15年前的老掉牙古董VFP9便是了!——区别也不过就是:可能前者掉了12颗牙,而后者掉了8颗牙,仅仅是“量”的差别而已,根本没有“质”的差别!试问:五十步和一百步,难道有区别么?——具体到这一个STRCONV()函数的小问题,感觉上,在这上头哪怕多花一丁点的气力,便都是纯属多余的!
呵呵。
2022-08-10 22:38
快速回复:DBF表导入UTF-8格式文本时的乱码问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017545 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved