试图在SSIS中加载一个具有平面文件源的UTF-8 CSV文件时,不断出现错误,称其为ANSI文件格式



我有一个SSIS数据流任务,它从CSV文件中读取并将结果存储在表中。

我只是逐行加载CSV文件(甚至不分隔列(,并将整行转储到数据库,这是一个非常简单的过程。

该文件包含UTF-8字符,正如我验证的那样,该文件也已经有了UTF BOM。

现在,当我使用平面文件连接加载文件时,我目前有以下设置:

  1. 已检查Unicode
  2. 高级编辑器将该列显示为";Unicode文本流DT_NTEXT">

当我运行程序包时,我会得到以下错误:

[Flat File Source[16]错误:;平面锉Source.Outputs[Flat File Source Output].Columns[DataRow]";是DT_ TEXT,ANSI文件不支持这种方式。请改用DT_TEXT,然后使用数据转换组件将数据转换为DT_NTEXT。

[平面文件源[16]]错误:无法检索列信息从平面文件连接管理器。

它告诉我使用DT_TEXT,但我的文件是UTF-8,它会丢失编码,对吗?对我来说毫无意义。

我还尝试过取消选中Unicode复选框,并将代码页设置为";65001 UTF-8";但我仍然会遇到如上所述的错误。

为什么它说我的文件是ANSI文件?

我已经用超文本打开了我的文件,并用BOM将其保存为UTF-8。我的平面文件预览确实正确显示了其他语言,如中文和英文的组合。

当我没有检查Unicode时,我也会收到这个错误,说平面文件错误输出列是DT_TEXT,当我尝试将其更改为Unicode文本流时,它会弹出一个错误,不允许我这样做。

我多年来一直面临同样的问题,对我来说,这可能是SQL Server Integration Services(SSIS(中平面文件连接提供程序的错误。我不能直接回答你的问题,但我有一个变通办法。在加载数据之前,我将所有UTF-8编码的文本文件转换为UTF-16LE(Little Endian(。这很麻烦,文件占用的空间大约是未压缩空间的两倍,但当要将Unicode加载到MS-SQL中时,UTF-16LE就可以了!

关于实际的转换步骤,我想说,这是由您决定什么将在您的工作流程中最有效。当我只有几个文件时,我会在文本编辑器中逐一转换它们,但当我有很多文件时,会使用PowerShell。例如,

Powershell -c "Get-Content -Encoding UTF8 'C:Source.csv' | Set-Content -Encoding Unicode 'C:UTF16Source.csv'"

相关内容

  • 没有找到相关文章

最新更新