【问题标题】:How can I specify the character encoding to be used by OLEDB when querying a DBF?如何在查询 DBF 时指定 OLEDB 使用的字符编码?
【发布时间】:2010-12-01 08:11:35
【问题描述】:

是否可以指定 OLEDB 在查询 DBF 文件时应使用哪种字符编码?

一种可能的解决方法是在 OLEDB 调用 DBF 文件的字符编码之前对查询字符串进行编码,然后在返回所有结果时对其进行编码。这会起作用,但如果 OLEDB 或可能的 ADO.NET 能为我做到这一点,那就太好了。

更新

Viktor Jevdokimov 的suggestion 似乎无法自动工作。但这让我调查了字符串的手动转换。可以使用 CultureInfo 的 TextInfo 属性找出 OemCodePage 和 WindowsCodePage 并使用它们来获取相应的 Encoding 实例进行手动转换。但我无法让 ADO.NET 使用这些编码为我执行转换。

【问题讨论】:

  • 可能是因为 ADO.NET 是一种传输,编码转换属于其他地方,发生转换的地方,例如使用 Reader 读取或使用 Writer 或任何其他 I/O 写入。
  • 那么您的回答如何为我提供解决方案?我不明白:)
  • 线程在您的应用级别。在调用 ADO.NET 之前更改线程区域性 - 这会将您的字符串转换为与 ADO.NET 之间的适当编码。您为其他输入/输出恢复原始线程编码。你试过我的方法了吗?

标签: .net ado.net character-encoding oledb dbf


【解决方案1】:

在执行 DBF SQL 之前,我更改了 CurrentThread 的 CurrentCulture 并在之后恢复:

Dim appCulture As System.Globalization.CultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US")
//execute command here
System.Threading.Thread.CurrentThread.CurrentCulture = appCulture

【讨论】:

  • 线程文化将如何影响字符编码? CultureInfo 有一个 TextInfo 属性,但它只处理代码页。
  • 假设您当前的运行时文化是 Unicode 或 UTF-8 或其他任何一种。 .NET 会将传入的所有内容转换为 Unicode,以在内存中内部存储,并在输出时使用当前文化转换回来。因此,改变当前的线程文化告诉 .NET 如何进行输入/输出转换。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-26
  • 1970-01-01
  • 2011-07-03
  • 2012-02-25
  • 1970-01-01
  • 2013-06-07
相关资源
最近更新 更多