我从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作为编码参数来修改它,结果是相同的。
你知道可能出现什么问题吗?
答案 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表
使用UTF-8编码导出为文本(CSV)时,
记事本中的“文件打开”对话框报告它编码为" ANSI"
但十六进制编辑器显示它实际上编码为UTF-8(字符é
编码为C3 A9
,而不仅仅是E9
,就像真实& #34; ANSI"编码)
和Notepad ++将其识别为" ANSI为UTF-8"
换句话说,一个没有BOM的UTF-8编码文件。