Microsoft.Jet.OLEDB.4.0 转换字符

Posted

技术标签:

【中文标题】Microsoft.Jet.OLEDB.4.0 转换字符【英文标题】:Microsoft.Jet.OLEDB.4.0 Converting Characters 【发布时间】:2011-08-13 05:42:55 【问题描述】:

我正在使用包含以下字符的 CSV:

” and •

我正在通过 OleDb 读取 CSV,提供程序是 Microsoft.Jet.OLEDB.4.0。当数据加载到 OleDbCommand 中时,字符分别转换为:

“ and •

我怀疑连接字符串中可能存在排序规则设置,但我找不到任何相关信息。

我可以确认以下几点:

    当我打开 CSV 时,我可以看到原始字符。 如果我通过 OleDb WHERE [field] LIKE '%•%' 对文件运行选择,我会得到 0 行,但如果 SELECT WHERE [field] LIKE '%-%' 我会返回行。

有什么想法吗?

【问题讨论】:

你的问题到底是什么? 如何使用 OleDbConnection 加载数据并在运行选择时阻止它转换字符? 【参考方案1】:

您可以创建schema.ini 文件并使用格式和CharacterSet 属性进行播放。

看看这个样本:How to read data from Unicode formatted text file and import to Data Table using .Net

这是另一个示例,它将向您展示如何使用 schema.ini 读取 csv 文件:Importing CSV file into Database with Schema.ini

【讨论】:

【参考方案2】:

终于!感谢@HABJAN,我能够获得与在连接字符串的扩展属性中设置 CharaterSet 一样简单的解决方案。在我的情况下,它是 UTF-8 ......默认情况下在 phpMyAdmin 中常用,这是我的数据被检索的地方。

产生的工作连接字符串:

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"0\";Extended Properties=\"text;HDR=Yes;FMT=Delimited;CharacterSet=65001;\""

关键是 CharacterSet=65001 (Code Page Identifier for UTF-8),这对于一些精通整理的人来说可能很明显,但多年来我设法避免了这些问题,并且在这方面从未遇到过。

当我还遵循 @http://msdn.microsoft.com/en-us/library/ms709353%28v=vs.85%29.aspx 找到的文档并将 CharacterSet 设置为与上述相同时,我也能够让 HABJAN 的解决方案发挥作用。

对于我的情况,这是更好的方法,因为它是一个更简单/更易于维护的解决方案,但是 +1 对 HABJAN 帮助我到达那里!

谢谢

【讨论】:

根据 MSDN,我看到只有 2 个选项可以将 CharacterSet 设置为 ANSII 或 OEM。但是,我看到您明确提到了 UTF8 的代码。这是否有效,并且任何其他代码(如 1252)也有效? docs.microsoft.com/en-us/sql/odbc/microsoft/…

以上是关于Microsoft.Jet.OLEDB.4.0 转换字符的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft.Jet.OLEDB.4.0 与 Microsoft.ACE.OLEDB.12.0,我应该使用哪个?

将连接字符串从 Microsoft.Jet.OLEDB.4.0 转换为 Microsoft.ACE.OLEDB.12.0 提供程序

使用 microsoft.jet.oledb.4.0 从 paradox db 过滤日期字段

Microsoft.Jet.OLEDB.4.0' 提供程序未在本地计算机上注册

Microsoft.Jet.OLEDB.4.0和Microsoft.ACE.OLEDB.12.0的区别

未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序