VB6程序。我有一个 UTF-8 编码的文件(不是我创建的),我从中读取值。我使用 FileSystemObject.ReadLine() 来读取文件。如果我将其读入 String 或 Variant 数据类型,并查看调试器中的值,它会以 ANSI 格式显示,其中有 2 个难看的字符,其中 UTF-8 西类牙语“n”所在的位置。我可以使用 FSO.WriteLine() 写回该字符串,当我在 NotePad++ 中打开该文件时,它会识别出它是 UTF-8 编码并正确显示该字符串的字符。如果我将该值再次放入文本框中,它会在 UTF-8“n” 应该所在的位置具有丑陋的 Ansi 字符。
如果我使用 UTF-8 编码从 MSAccess 数据库中通过 ID 读取相同的值,并将其放入字符串数据类型中,它会在调试器中正确显示为 UTF-8,然后如果我将其分配给文本框。文本,在TextBox中以UTF-8编码显示。
所以问题似乎是分配给 String 数据类型的内容以及该 String 如何识别刚刚传递给它的数据的编码。
我错过了什么?为什么当数据从 DAO 记录集对象分配给 String 变量时,它可以识别 UTF-8 编码,但从具有相同值的 UTF-8 编码文件读取时却不能识别。如果我在 NotePadd++ 中打开该文件,它似乎可以正确识别并显示字符。
非常感谢您的帮助。
最佳答案
感谢大家的帮助。问题是 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]"
希望这对其他人有帮助。
关于string - VB6从文件中读取UTF-8字符串并用它来查询MSAccess数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33683365/