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 ++中打开该文件,它似乎知道并正确显示字符。
非常感谢您的帮助。
答案 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]"
希望这有助于其他人。