如何将SSIS不支持的EUC-TW编码文件及CSV导入为平面文件源?
解决SSIS导入不支持编码(如EUC-TW)的CSV文件问题
方法1:在Script Component中直接读取字节并转换编码
你之前用Script Component时可能误用了SSIS内置的文本读取逻辑,导致仍需指定支持的编码。正确做法是绕过内置读取,直接处理文件字节流:
- 步骤1:添加Script Component作为源,选择「源」类型
- 步骤2:在Script编辑器中定义好输出列(对应CSV的各个字段)
- 步骤3:在
CreateNewOutputRows方法中,直接读取文件字节并解码:
using System.IO; using System.Text; using Microsoft.VisualBasic.FileIO; public override void CreateNewOutputRows() { // 读取原始文件字节 byte[] rawBytes = File.ReadAllBytes(@"C:\YourEucTwFile.csv"); // 用EUC-TW编码解码成字符串 Encoding eucTw = Encoding.GetEncoding("EUC-TW"); // 用TextFieldParser处理带引号的CSV(更可靠) using (TextFieldParser parser = new TextFieldParser(new MemoryStream(rawBytes), eucTw)) { parser.TextFieldType = FieldType.Delimited; parser.SetDelimiters(","); parser.HasFieldsEnclosedInQuotes = true; // 跳过表头(按需) parser.ReadLine(); while (!parser.EndOfData) { string[] fields = parser.ReadFields(); Output0Buffer.AddRow(); // 给输出列赋值,示例: Output0Buffer.Name = fields[0]; Output0Buffer.Age = int.Parse(fields[1]); // 其他字段依次处理 } } }
方法2:预处理文件转换编码
如果不想写脚本,可先将文件转成SSIS支持的编码(如UTF-8),再用平面文件源导入:
- PowerShell批量转换脚本:
$source = "C:\Source\EucTwFile.csv" $target = "C:\Target\Utf8File.csv" Get-Content -Path $source -Encoding ([Text.Encoding]::GetEncoding("EUC-TW")) | Set-Content -Path $target -Encoding UTF8
- 记事本手动转换:打开文件后选择「文件」→「另存为」,编码选UTF-8保存。
方法3:使用第三方SSIS组件
部分第三方组件(如CozyRoc、Devart)支持更多编码格式,可直接作为平面文件源使用,无需手动转换编码。注意这类组件可能需付费授权。
内容的提问来源于stack exchange,提问作者ericlien
相关产品推荐
相关产品推荐

