在ms访问中使用utf-8编码导出文本文件

时间:2014-04-03 07:52:03

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

我从ms access 2010中的2个查询导出文本文件。查询来自不同的链接ODBC表(但表只是数据,结构和数据类型相同)。我设置了导出规范,以两个文件的utf-8编码导出文本文件。现在来这里遇到了麻烦。当我导出查询并在记事本中打开它们时,一个查询在utf-8中,第二个查询在ANSI中。我不知道当两个队友都有相同的出口规格并且让我发疯时,这怎么可能。

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

  

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

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

你知道可能出现什么问题吗?

1 个答案:

答案 0 :(得分:2)

不要依赖记事本中的“文件打开”对话框来告诉您文本文件是否编码为" 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++之类的应用程序打开文件。它将区分UTF-8文件 BOM(它指定为" UTF-8")和UTF-8文件而不用 BOM (它指定为" ANSI为UTF-8")

为了说明,请考虑以下Access表

access.png

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

ExportSpec.png

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

notepad.png

但十六进制编辑器显示它实际上编码为UTF-8(字符é编码为C3 A9,而不仅仅是E9,就像真实& #34; ANSI"编码)

hexedit.png

和Notepad ++将其识别为" ANSI为UTF-8"

npp.png

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