MS Access VBA - 导入CSV文件 - 颠倒" L"

时间:2014-11-06 08:36:22

标签: vba ms-access

我在Access中有一个宏,用于文件夹中的所有文件重新格式化并将数据导入Access表。对于大多数这些文件,它可以很好地工作,但对于某些文件它不会导入任何东西。我已经调试了这个过程,发现当这些文件被拉入记录集时,我创建了它来保存它们,因为我重新格式化每个角色都会被颠倒过来" L":

ScreenShot.png

这不在文件中,我无法在任何其他视图中看到它。如果我在变量上设置监视并用该字符串填充它,则将其解释为空格。如果我在Excel或记事本中打开它们,这些文件在文件中也不可见......

知道造成这种情况的原因是什么?

Link to example file on Google Drive

1 个答案:

答案 0 :(得分:2)

您尝试导入的CSV文件显然已使用Unicode编码保存(特别是UTF16-LE),Access正在尝试读取它们,就好像它们被编码为" ANSI" (Windows-1252),所以

  • 前两个"有趣的角色"是字节顺序标记(BOM),0xFFFE,Access解释为ÿþ
  • 穿插"颠倒' L'""字符是每个Unicode字符的0x00高位字节的表示

HexEdit.png

如果您尝试导入没有导入规范的CSV文件,则会发生这种情况,因为在这种情况下,Access将会猜测"在文件的结构,并假设像

  • 编码("代码页")是" ANSI" (或者有时" OEM"),
  • 字段分隔符为,
  • 文字限定符为"(或许{none}

解决方案是创建一个已保存的导入规范,并将其名称作为执行导入的DoCmd.TransferText方法的第二个参数。有关创建已保存的导入规范的详细信息,请参阅我的其他答案here