| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 604 人关注过本帖
标题:DBF表导入UTF-8格式文本时的乱码问题
只看楼主 加入收藏
schtg
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:65
帖 子:1197
专家分:2134
注 册:2012-2-29
收藏
得分:4 
回复 9楼 吹水佬
学习啦,谢谢!
2022-08-11 06:51
huasinstamps
Rank: 2
等 级:论坛游民
帖 子:43
专家分:16
注 册:2017-6-1
收藏
得分:0 
回复 9楼 吹水佬
多谢吹老师!

每次发贴求教,论坛上的几位老师都会详尽的回复指点,令我受益匪浅。非常的感谢!

这段代码我得好好研究下。虽然我用VFP也不少年头了,但一直是业余水平。
2022-08-11 09:30
厨师王德榜
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:168
帖 子:874
专家分:4254
注 册:2013-2-16
收藏
得分:4 
关于 追加 文本文件入表,我参照前辈的经验,曾经写过完整的一个模型.
这里,愿意分享出来,大家指正.
* 追加前,程序会判断 源文本文件是何种编码格式?
  若是utf8或unicode格式,会询问用户是否需先转换?
* 若用户回答是,则程序先尝试转换,再执行追加动作...

特别说明: 在VFP 9.0下可用.
追加文本入表完整模型.zip (2.81 KB)


[此贴子已经被作者于2022-8-11 15:38编辑过]

2022-08-11 15:32
cssnet
Rank: 2
等 级:论坛游民
威 望:1
帖 子:143
专家分:97
注 册:2013-10-4
收藏
得分:0 
以下是引用厨师王德榜在2022-8-11 15:32:30的发言:
关于 追加 文本文件入表,我参照前辈的经验,曾经写过完整的一个模型.
这里,愿意分享出来,大家指正.
* 追加前,程序会判断 源文本文件是何种编码格式?
  若是utf8或unicode格式,会询问用户是否需先转换?
* 若用户回答是,则程序先尝试转换,再执行追加动作...

特别说明: 在VFP 9.0下可用.


事实上,在我们的软件当中,有一个使用频率最高的函数是:
file2UTF8()
顾名思义:函数功能便是,读入任意编码的TXT文件,并统一转换至UTF-8编码。
这么说吧,今时今日,UTF-8是全宇宙最重要也最常用的文本编码格式,没有之一。
我想象不出,地球上居然还有人会勤劳朴素地特意将UTF-8、Unicode编码转换为ANSI编码来使用!
呵呵呵呵。
一个最简单最浅显的道理:
既然傻瓜都知道,Windows 10/11的记事本,会默认将文本文件存为UTF-8编码格式;那么,即便你闭上眼睛也该想得到,UTF-8编码肯定是当下全宇宙最优秀、最通行也最最最常用的TXT编码格式!难不成,微软吃饱了撑的,非要故意存成UTF-8来为难你?!
2022-08-11 16:24
厨师王德榜
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:168
帖 子:874
专家分:4254
注 册:2013-2-16
收藏
得分:0 
谢谢前辈指正,
file2utf8()是不是一个需要声明的api?
有示范吗? 谢谢
2022-08-11 17:11
cssnet
Rank: 2
等 级:论坛游民
威 望:1
帖 子:143
专家分:97
注 册:2013-10-4
收藏
得分:0 
以下是引用厨师王德榜在2022-8-11 17:11:54的发言:
谢谢前辈指正,
file2utf8()是不是一个需要声明的api?
有示范吗? 谢谢


不敢当。
file2utf8()只是一个VFP9下的自定义函数。
大致流程:

Function File2UTF8
LPARAMETERS lcFileName
if file(lcFileName)
   lcText = fileToStr(lcFileName)
else
   return ""
endif
*然后Do case逐一测试源TXT的编码格式,并用STRCONV(lcText, 10)之类转换成UTF-8返回
lcBOM = Createbinary(left(lcText, 2))
do case
   case  lcBOM = 0hEFBB  &&'UTF-8'
       return lcText
   case  lcBOM = 0hFFFE  &&'UNICODE'
       return STRCONV(lcText, 10)
   case  lcBOM = 0hFEFF  &&'UNICODE BE'
       * 先将UNICODE大头转小头,即:将奇偶数字节对调(略)……然后再:
       return STRCONV(lcText, 10)    &&Unicode 字符转换为 UTF-8
   Otherwise    &&无BOM,接着猜测源TXT的编码,究竟是:ANSI、UTF-8、Unicode LE还是Unicode BE
      do case
         ...
         ...
      endcase
endcase

抱歉,编写代码的电脑没在身边,凭记忆写的,自己用上边的“转换模板”补足吧。
2022-08-11 17:43
快速回复:DBF表导入UTF-8格式文本时的乱码问题
数据加载中...
 
   



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

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