VB6从文件中读取UTF-8字符串并使用它来查询MSAccess数据库

时间:2015-11-12 23:28:31

标签: string encoding utf-8 vb6

VB6程序。我有一个UTF-8编码的文件(不是我创建的),我从中读取值。我使用FileSystemObject.ReadLine()来读取文件。如果我将其读入String或Variant数据类型,并查看调试器中的值,它将以ANSI显示,其中有两个丑陋的字符,其中UTF-8西班牙语为“n”。我可以使用FSO.WriteLine()将该字符串写回来,当我在NotePad ++中打开文件时,它识别出它是UTF-8编码并正确显示该字符串的字符。如果我把这个值放在TextBox中,那么它还有丑陋的Ansi字符,其中应该是UTF-8“n”。

如果我使用UTF-8编码从MSAccess数据库读取ID相同的值,则将其置于String数据类型中,它在调试器中正确显示为UTF-8,然后我将其分配给TextBox。文本,它在TextBox中以UTF-8编码显示。

所以问题似乎是分配给String数据类型的内容以及String如何识别刚刚传递给它的数据的编码。

我错过了什么?为什么String变量在从DAO记录集对象分配数据时识别UTF-8编码,而在从具有相同值的UTF-8编码文件中读取时则不识别。如果我在NotePadd ++中打开该文件,它似乎知道并正确显示字符。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

感谢所有的帮助。问题是FileSystemObject无法读取UTF-8文件。这里的另一篇文章回答:Read utf-8 text file in vbscript

我没有意识到这一点,而且我对整体编码的理解非常薄弱。现在好一点了解。

上面提供的解决方案是使用ADODB.Stream对象来读取utf-8文件。

但是,我想将CSV文件导入我的Access数据库。经过几个小时的搜索,这是执行它的代码。

db.Execute "Select * Into Test1 From [Text;CharacterSet=65001;FMT=CSVDelimited;HDR=YES;DATABASE=C:\Test\].[utf8-test.csv]"

希望这有助于其他人。