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

标签 string encoding utf-8 vb6

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/

相关文章:

xml - 如何对流进行编码以便将其存储在 xml 文件中?

Javascript 将字符串从 utf-8 转换为 iso-8859-1

python - 如何从代表环肽的字符串中生成子肽(特殊组合)?

java - 使用 charAt 和 while 循环 Java 查找字符串中的字母

ios - 尝试使用在 Swift 中具有重复值的枚举

ruby - ruby 1.9 中有没有办法从字符串中删除无效的字节序列?

Java 字符串的细微差别

.net - 不在字符集中的 HTML 编码字符

Java 看不到文件系统上包含非法字符的文件

php - UTF-8 问题 PHP/MySQL