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

尝试在SSIS中加载带有平面文件源的UTF-8 CSV文件时,不断出现错误,称其为ANSI文件格式,ssis,visual-studio-2017,Ssis,Visual Studio 2017,我有一个SSIS数据流任务,它读取CSV文件并将结果存储在表中 我只是按行加载CSV文件(甚至不分离列),并将整行转储到数据库,这是一个非常简单的过程 该文件包含UTF-8字符,并且在我验证这一点时,该文件还包含UTF BOM 现在,当我使用平面文件连接加载文件时,我当前有以下设置: Unicode检查 高级编辑器将列显示为“Unicode文本流DT_NTEXT” 当我运行包时,出现以下错误: [平面文件源[16]]错误:“平面文件”的数据类型 Source.Outputs[Flat File

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

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

该文件包含UTF-8字符,并且在我验证这一点时,该文件还包含UTF BOM

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

  • Unicode检查
  • 高级编辑器将列显示为“Unicode文本流DT_NTEXT”
  • 当我运行包时,出现以下错误:

    [平面文件源[16]]错误:“平面文件”的数据类型 Source.Outputs[Flat File Source Output].Columns[DataRow]”是DT_NTEXT, ANSI文件不支持此选项。改用DT_文本,然后 使用数据转换组件将数据转换为DT_NTEXT

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

    它告诉我使用DT_文本,但我的文件是UTF-8,它将失去其编码权?对我来说毫无意义

    我也尝试过取消选中Unicode复选框,并将代码页设置为“65001 UTF-8”,但仍然会出现如上所述的错误

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

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


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

    我多年来一直面临着同样的问题,在我看来,这可能是SQLServerIntegrationServices(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:\UTF16\Source.csv'"
    

    多年来,我一直面临着同样的问题,在我看来,这可能是SQLServerIntegrationServices(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:\UTF16\Source.csv'"