【问题标题】:exporting text file with utf-8 encoding in ms access在 ms 访问中导出具有 utf-8 编码的文本文件
【发布时间】:2014-05-14 21:33:27
【问题描述】:

我正在从 ms access 2010 中的 2 个查询中导出文本文件。查询来自不同的链接 ODBC 表(但表仅在数据、结构和数据类型方面不同)。我设置了导出规范,以便为这两个文件以 utf-8 编码导出文本文件。现在麻烦的部分来了。当我导出查询并在记事本中打开它们时,一个查询是 utf-8,第二个是 ANSI。当两个 queires 具有相同的导出规范时,我不知道这怎么可能,这让我发疯。

这是我导出查询的 VBA 代码:

DoCmd.TransferText acExportDelim, "miniflow", "qry01_CZ_test", "C:\TEST_CZ.txt", 没有 DoCmd.TransferText acExportDelim, "miniflow", "qry01_SK_test", "C:\TEST_SK.txt", 没有

我也尝试通过添加 65001 作为编码参数来修改它,结果相同。

你知道哪里出了问题吗?

【问题讨论】:

  • 您使用的保存的导出规范是否专门选择Unicode (UTF-8)编码,如this
  • 是的,完全一样。
  • 您如何确定一个导出是“utf-8”而另一个是“ANSI”?您是否使用十六进制编辑器来检查重音字符的编码,例如 é(在“ANSI”中是 E9,在 UTF-8 中是 C3 A9)?
  • 我刚刚在记事本中打开了文件,第一个文件是 UTF-8,第二个文件是 ANSI(如this)。但是,如果我在 pspad 十六进制编辑器中打开它们,则字符类似于您编写的字符 - ansi 中的é 是 E9,但 utf-8 é 是 EFBBBFC3A9。这对你有帮助吗?
  • é in utf-8 就像 EFBBBFC3A9 只是在开头,如果我把 char 放在其他地方,那么它就是你写的 C3A9

标签: sql vba encoding utf-8 ms-access-2010


【解决方案1】:

不要依赖记事本中的“文件打开”对话框来告诉您文本文件是编码为“ANSI”还是 UTF-8。这只是记事本根据文件是否以字节 EF BB BF 开头的“猜测”,即 UTF-8 字节顺序标记 (BOM)。

许多(大多数?)Windows 应用程序将在 UTF-8 编码的文本文件的开头包含 UTF-8 BOM。一些 Unicode 纯粹主义者通常非常强烈地坚持认为 UTF-8 文件不需要 BOM,应该将其排除在外,但这是 Windows 应用程序的行为方式。

不幸的是,Access 在将文件导出为文本时并不总是遵循这种模式。从 Access 导出的 UTF-8 文本文件可能会省略 BOM,如果记事本等应用程序假定 UTF-8 编码文件将始终包含 BOM 作为文件的前三个字节,这可能会使它们感到困惑。

如需确定文本文件编码的更可靠方法,请考虑使用Notepad++ 之类的应用程序打开文件。它将区分 带有 BOM 的 UTF-8 文件(它指定为“UTF-8”)和 UTF-8 文件没有 BOM(它指定为"ANSI 为 UTF-8")

为了说明,考虑下面的访问表

使用 UTF-8 编码导出为文本 (CSV) 时,

记事本中的文件打开对话框报告它被编码为“ANSI”

但是十六进制编辑器显示它实际上被编码为 UTF-8(字符 é 被编码为 C3 A9,而不仅仅是 E9 就像真正的“ANSI”编码那样)

Notepad++ 将其识别为“ANSI as UTF-8”

换句话说,一个没有 BOM 的 UTF-8 编码文件。

【讨论】:

  • 非常感谢您的解释!这是我的情况。当我在十六进制编辑器中打开文件时,é 被编码为 C3 A9。这是很大的安慰。该死的你赢了记事本:)
猜你喜欢
  • 1970-01-01
  • 2015-11-04
  • 2011-06-20
  • 2019-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-23
相关资源
最近更新 更多