不同机器上 dBase III .dbf 文件的编码问题

2024-01-02

我正在使用 C# 和 .NET 3.5,尝试使用 ODBC 和 Microsoft dBase 驱动程序从旧 dbf 文件导入一些数据。

dbf 采用 dBase III 格式,并使用 ibm850 字符串编码。

现在,当我在我的机器上运行我的程序时,从 OdbcDataReader 读取的所有字符串数据都会转换为 UTF-16 或 UTF-8 或其他内容,idk 和我将其保存为 UTF-8 并且一切正常,但是当我尝试在 XP 机器上使用此程序时,某些字符无法正确转换为 UTF-8。例如“Õ”。可能还有其他一些。像“Ä”、“Ö”和“Ü”这样的字符都可以。这就是问题。 也许 ODBC 或驱动程序使用了一些机器文化信息或其他东西来搞乱一切。

是否可以从数据库中以二进制形式读取字符串?也许有一些函数,如 CONVERT 或 CAST?或者我在哪里可以找到适用于此 dBase 驱动程序或其他驱动程序的 SQL 函数和语法的一些参考?我四处寻找,却什么也没找到。使用ODBC和SQL时我感觉自己很盲目。

现在我正在使用一个临时 hack,将所有 σ 替换为 Õ。

Thanks!

示例代码:

System.Data.Odbc.OdbcConnection oConn = new System.Data.Odbc.OdbcConnection();
oConn.ConnectionString = @"Driver={Microsoft dBase Driver (*.dbf)};DriverID=277;Dbq=" + dbPath + ";";
oConn.Open();

System.Data.Odbc.OdbcCommand oCmd = oConn.CreateCommand();
oCmd.CommandText = @"SELECT name FROM " + dbPath + "TABLE.DBF";

System.Data.Odbc.OdbcDataReader reader = oCmd.ExecuteReader();
reader.Read();

byte[] buf = Encoding.UTF8.GetBytes(reader.GetString(0));
BinaryWriter writer = new BinaryWriter(File.Open(@"C:\DBF\Test.txt", FileMode.Create));
writer.Write(buf);

Result:

dbf 中的 E5(850 中的 Õ)

pc1 上的 Test.txt:C3 95(UTF-8 格式的 Õ)

pc2 上的 Test.txt:CF 83(UTF-8 中的 σ)


如果您对这些文件仍有疑问,我也许可以帮助您。

文件中偏移量 29(十进制)处的“代码页字节”又名“语言驱动程序 ID”(LDID) 中有什么?

我有一个基于 Python 的 DBF 阅读器,它可以读取几乎任何字段数据类型和任何代码页——它有一个从代码页字节到代码页编号的各种映射源编译而成的长列表。选项包括 (1) 相信 LDID,提供 Unicode (2) 忽略 LDID,提供未解码的字节 (3) 覆盖 LDID,使用特定代码页解码为 Unicode。当然可以将 Unicode 编码为 UTF-8。

DBF 阅读器还会进行大量合理性交叉检查,这可能有助于调查 VFP 认为文件已损坏的原因。

你怎么知道它使用的是IBM850?我拥有的另一段 Python 代码是一个原型编码检测器,与源自 Mozilla 代码的“chardet”等检测器不同,它不是以 Web 为中心的,并且可以愉快地识别大多数旧的 DOS 代码页 - 这可能会有所帮助。

观察:代码页 437 中的希腊字母小写西格玛 (σ) 是 0xE5,代码页 850 继承了它——“pc2”似乎有点过时了……

如果您认为我可以提供任何帮助,请随时给我发电子邮件 insert_punctuation("sjmachin", "lexicon", "net")

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

不同机器上 dBase III .dbf 文件的编码问题 的相关文章

随机推荐

  • 在最新版本的 Notepad++ 中排序不区分大小写

    如何在最新版本的 Notepad 即 gt 6 5 中进行不区分大小写的排序 我知道使用 TextFX 的旧方法 但是 Notepad 现在具有内置的 行操作 但这些似乎区分大小写 您仍然可以使用TextFX 角色Notepad 最新版本中
  • Rails 3 覆盖 Devise 会话控制器

    我需要在登录过程中覆盖 Devise 会话控制器 Rails 3 0 9 Ruby 1 9 2 Devise 1 3 4 我尝试过但没有任何效果 class SessionsController lt Devise SessionsCont
  • Node-webkit 应用程序 - 如何更新它?

    我正在使用 node webkit 为我的学生开发应用程序 并提供一站式解决方案 我需要每月更新一次 node webkit 存档 我有办法做到这一点吗 基本上我每个月只需要替换一个 html 文件 比如 page1 html 我用谷歌搜索
  • 为什么 Java 的序列化比第 3 方 API 慢?

    在处理套接字和序列化对象时 我注意到有一些第三方库可以在 Java 上实现更快的对象序列化 例如Kryo http code google com p kryo and FST http code google com p fast ser
  • “spring-boot-maven-plugin”重新打包后,“Implementation-Version”不在清单中

    在 Maven 中给出这个插件配置pom xml
  • asmx Web 服务、json、javascript/jquery?

    我正在使用 asmx 从数据库检索一些数据 public class TestPage1 public int UserID get set public string UserName get set public string Pass
  • 函数中的引用如何工作?

    首先 我编写了第一个代码示例 但它无法正常工作 我更喜欢第一个示例 但只有第二个示例可以正常工作 我不知道为什么第一个样本没有改变原始数组 但第二个样本却改变了 差别在哪里呢 第一个样本 import heapq def heap sort
  • WPF进度条样式是块状的?

    我在应用程序中使用不确定的进度条 并且得到了一系列水平运行的块的糟糕动画 难道没有更好的风格可用 例如 vista 或 windows 7 吗 您的进度条具有与当前 Windows 主题相对应的样式 如果您在带有 Aero 主题的 Wind
  • 显示:内联边距、填充、宽度、高度

    如果我设置display inline对于任何元素 那么将margin padding width height不影响该元素 是否有必要使用float left or display block or display inline bloc
  • 是否可以在线检索 Dynamics CRM 中的架构更改信息?

    创建自定义实体 添加或更改字段时 有人会对元数据进行开箱即用的更改 如何知道是谁以及何时做的 从 UI 表单创建或修改也是如此 CRM 中的元数据似乎不存储该信息 我认为无法访问您所要求的信息 本地 CRM 数据库中没有此类信息 我想 CR
  • Mercurial:在一个存储库中的分支之间合并一个文件

    当我在 Hg 存储库中有两个分支时 如何仅将一个文件与另一个分支合并 而不合并变更集中的所有其他文件 是否可以仅合并某些文件 而不是整个变更集 警告 虚拟合并 原样 Martin Geisler 推荐 https stackoverflow
  • 在TFS中构建一组特定项目

    有谁知道如何配置 TFS Build 以在解决方案中构建一组项目 我的解决方案有 16 个项目 但对于我的构建定义之一 我希望编译其中的一些项目 我认为最简单的方法是创建一个新的解决方案文件 没有什么可以阻止您拥有引用相同项目 或某个子集
  • Webpack 导入 font-awesome 库时出现问题

    我正在构建一个 React 应用程序 需要导入 font awesome CSS 但我收到一条错误消息 指出该模块无法解析 woff2 文件 下面是我的代码 import React from react import ReactDOM f
  • chromes“appendChild”真的那么慢吗?

    我有一个框架 可以完全使用以下方式生成应用程序的 DOMdocument createElement and document appendChild 现在应用程序变得越来越大 我注意到 Chrome 需要比其他浏览器更长的时间来构建 DO
  • WPF:如何使控件在 StackPanel 中拉伸?

    当放置在 StackPanel 中时 Slider 和一些其他控件不会拉伸以填充可用空间 相反 宽度始终为 MinWidth 如果未设置 MinWidth 则约为 10 像素 如何使其拉伸 相当于 WinForms 中的 Anchor Le
  • 有没有一个好的 jQuery 插件可以实现隐藏效果,看起来就像 Windows 中最小化窗口一样

    正如标题所述 是否有一个 jQuery 插件效果可以让我以类似于 Windows 的方式隐藏 div 因此 div 会移动 缩小并变得透明到屏幕上的某个点 这是一个例子 http fstoke me jquery window http f
  • 删除特定字符之后的所有字符[重复]

    这个问题在这里已经有答案了 谁能告诉我如何删除之后的字符 在 PHP 中 我有一根绳子test q new我需要从 到字符串的末尾 最短的 echo strtok test new 如果你想保留问号 解决方案几乎是一样的 echo strt
  • Spring Security Remember Me 失败并出现 CookieTheftException [重复]

    这个问题在这里已经有答案了 My SecurityConfig我在其中配置记住我功能的类userService and persistenceTokenRepository Override protected void configure
  • 在 Safari 中查看 HTTP 标头

    在 Mac OS X Sierra 上的 Safari 10 Web 浏览器中 打开 Web Inspector 我访问一个公共网站 例如 google com 如何在 macOS 上的 Safari 中查看 HTTP 标头 将完整的解决方
  • 不同机器上 dBase III .dbf 文件的编码问题

    我正在使用 C 和 NET 3 5 尝试使用 ODBC 和 Microsoft dBase 驱动程序从旧 dbf 文件导入一些数据 dbf 采用 dBase III 格式 并使用 ibm850 字符串编码 现在 当我在我的机器上运行我的程序