不同机器上 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 文件的编码问题 的相关文章

  • 如何使用 PowerShell 中的凭据从本地复制到远程位置?

    我是 PowerShell 的新手 我有用户名和密码来访问远程位置的共享文件夹 I need 复制文件foo txt从当前位置到 Bar foo myCOmpany com logs在为以下内容编写的 PS1 脚本中Powershell v
  • Clang 编译器 (x86):80 位长双精度

    我正在尝试在 x86 Windows 平台上使用本机 80 位长双精度 海湾合作委员会选项 mlong double 80 https gcc gnu org onlinedocs gcc x86 Options html似乎不适用于 cl
  • C++ 异步线程同时运行

    我是 C 11 中线程的新手 我有两个线程 我想让它们同时启动 我可以想到两种方法 如下 然而 似乎它们都没有按照我的预期工作 他们在启动另一个线程之前启动一个线程 任何提示将不胜感激 另一个问题是我正在研究线程队列 所以我会有两个消费者和
  • 如何配置 WebService 返回 ArrayList 而不是 Array?

    我有一个在 jax ws 上实现的 java Web 服务 此 Web 服务返回用户的通用列表 它运行得很好 Stateless name AdminToolSessionEJB RemoteBinding jndiBinding Admi
  • 如何从 C# 控制器重定向到外部 url

    我使用 C 控制器作为网络服务 在其中我想将用户重定向到外部网址 我该怎么做 Tried System Web HttpContext Current Response Redirect 但没有成功 使用控制器的重定向 http msdn
  • ASP MVC:服务应该返回 IQueryable 的吗?

    你怎么认为 你的 DAO 应该返回一个 IQueryable 以便在你的控制器中使用它吗 不 您的控制器根本不应该处理任何复杂的逻辑 保持苗条身材 模型 而不是 DAO 应该将控制器返回给视图所需的所有内容 我认为在控制器类中看到查询 甚至
  • 如何从网站下载 .EXE 文件?

    我正在编写一个应用程序 需要从网站下载 exe 文件 我正在使用 Visual Studio Express 2008 我正在使用以下代码 private void button1 Click object sender EventArgs
  • 将数据打印到文件

    我已经超载了 lt lt 运算符 使其写入文件并写入控制台 我已经为同一个函数创建了 8 个线程 并且我想输出 hello hi 如果我在无限循环中运行这个线程例程 文件中的o p是 hello hi hello hi hello hi e
  • 在非活动联合成员上使用“std::addressof”是否定义明确[重复]

    这个问题在这里已经有答案了 下面的代码是尝试实现constexpr的版本offsetof在 C 11 中 它可以在 gcc 7 2 0 和 clang 5 0 0 中编译 这取决于申请std addressof工会非活跃成员的成员 这是明确
  • Azure 事件中心 - 按顺序接收事件

    我使用下面的代码从 Azure Event Hub 接收事件 https learn microsoft com en us azure event hubs event hubs dotnet framework getstarted s
  • C# 中条件编译符号的编译时检查(参见示例)?

    在 C C 中你可以这样做 define IN USE 1 define NOT IN USE 1 define USING system 1 system 1 IN USE 进而 define MY SYSTEM IN USE if US
  • 生产代码中的 LRU 实现

    我有一些 C 代码 需要使用 LRU 技术实现缓存替换 目前我知道两种实现LRU缓存替换的方法 每次访问缓存数据时使用时间戳 最后比较替换时的时间戳 使用缓存项的堆栈 如果最近访问过它们 则将它们移动到顶部 因此最后底部将包含 LRU 候选
  • 通过 NHibernate 进行查询,无需 N+1 - 包含示例

    我有一个 N 1 问题 我不知道如何解决它 可以在这个问题的底部找到完全可重复的样本 因此 如果您愿意 请创建数据库 设置 NUnit 测试和所有附带的类 并尝试在本地消除 N 1 这是我遇到的真实问题的匿名版本 众所周知 这段代码对于帮助
  • 当我“绘制”线条时,如何将点平均分配到 LineRenderer 的宽度曲线?

    我正在使用线条渲染器创建一个 绘图 应用程序 现在我尝试使用线条渲染器上的宽度曲线启用笔压 问题在于 AnimationCurve 的 时间 值 水平轴 从 0 标准化为 1 因此我不能在每次添加位置时都在其末尾添加一个值 除非有一个我不知
  • 将代码拆分为标头/源文件

    我从 Asio 的示例页面中获取了以下代码 class tcp connection public boost enable shared from this
  • 为什么拆箱枚举会产生奇怪的结果?

    考虑以下 Object box 5 int int int box int 5 int nullableInt box as int nullableInt 5 StringComparison enum StringComparison
  • 转到定义:“无法导航到插入符号下的符号。”

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我今天突然开始在我的项目中遇到一个问题 单击 转到定义 会出现一个奇怪的错误 无法导航到
  • WinRT 定时注销

    我正在开发一个 WinRT 应用程序 要求之一是应用程序应具有 定时注销 功能 这意味着在任何屏幕上 如果应用程序空闲了 10 分钟 应用程序应该注销并导航回主屏幕 显然 执行此操作的强力方法是在每个页面的每个网格上连接指针按下事件 并在触
  • Googletest:如何异步运行测试?

    考虑到一个包含数千个测试的大型项目 其中一些测试需要几分钟才能完成 如果按顺序执行 整套测试需要一个多小时才能完成 通过并行执行测试可以减少测试时间 据我所知 没有办法直接从 googletest mock 做到这一点 就像 async选项
  • 实例化 Microsoft.Office.Interop.Excel.Application 对象时出现错误:800700c1

    实例化 Microsoft Office Interop Excel Application 以从 winforms 应用程序生成 Excel 时 出现以下错误 这之前是有效的 但突然间它停止工作了 尽管代码和 Excel 版本没有变化 我

随机推荐

  • 在最新版本的 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 字符串编码 现在 当我在我的机器上运行我的程序