标题:DBF表导入UTF-8格式文本时的乱码问题
只看楼主
schtg
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:https://t.me/pump_upp
等 级:贵宾
威 望:67
帖 子:1355
专家分:2534
注 册:2012-2-29
得分:4 
回复 9楼 吹水佬
学习啦,谢谢!
2022-08-11 06:51
huasinstamps
Rank: 2
等 级:论坛游民
帖 子:50
专家分:21
注 册:2017-6-1
得分:0 
回复 9楼 吹水佬
多谢吹老师!

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

这段代码我得好好研究下。虽然我用VFP也不少年头了,但一直是业余水平。
2022-08-11 09:30
厨师王德榜
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:183
帖 子:942
专家分:4724
注 册: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: 4
等 级:业余侠客
威 望:4
帖 子:317
专家分:203
注 册: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: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:183
帖 子:942
专家分:4724
注 册:2013-2-16
得分:0 
谢谢前辈指正,
file2utf8()是不是一个需要声明的api?
有示范吗? 谢谢
2022-08-11 17:11
cssnet
Rank: 4
等 级:业余侠客
威 望:4
帖 子:317
专家分:203
注 册: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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-509751-1-1.html




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

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