SSIS勾选Unicode导入CSV文件无法识别{CR}{LF}分隔符怎么办
问题成因
- SSIS平面文件连接器的「Unicode」复选框没有自动识别文件编码的逻辑,勾选后会强制以固定双字节的UTF-16 LE编码解析全文件,此时手动配置的code page参数会直接失效,这就是你调整各类编码选项都无法解决问题的核心原因。
- 你手中的CSV文件实际并非UTF-16 LE编码:日常业务导出的CSV如果包含非ASCII字符,大多是UTF-8、GBK这类可变/单字节编码,当SSIS强行按双字节为单位逐组读取字节时,原本单字节的CR(
0x0D)、LF(0x0A)会和相邻字节拼接成一个双字节字符,根本不会被识别为独立的行分隔符。 - SSIS默认仅扫描文件前524288字节(512KB)定位分隔符,双字节解析模式下这段扫描范围里匹配不到符合规则的
{CR}{LF}序列,就会弹出你看到的报错提示。
解决方案
根据你文件的实际编码选对应方案即可:
- 如果文件是UTF-8编码:不要勾选「Unicode」选项,直接在code page下拉菜单中选择
65001 (UTF-8),此时SSIS既能正常识别CRLF行分隔符,也能正确解析所有非ASCII字符,不会出现乱码。 - 如果文件确实是UTF-16 LE编码仍报错:先检查文件前512KB范围内是否存在未闭合的引号、错误转义的特殊字符干扰分隔符识别;也可以找到平面文件连接器的
ScanRows属性,将默认值1修改为0,强制SSIS扫描全文件定位分隔符(大文件场景下仅会增加少量预读取耗时,不影响导入性能)。 - 如果文件是GBK/GB2312等ANSI中文编码:保持「Unicode」选项不勾选,code page选择
936 (GBK)即可正常读取,无需开启Unicode开关。
避坑提示:不要为了支持中文等非ASCII字符就盲目勾选Unicode选项,SSIS非Unicode模式搭配正确的code page完全可以正常导入所有语种的字符,只有文件本身为UTF-16编码时才需要勾选该选项。
内容的提问来源于stack exchange,提问作者Mordechai
相关产品推荐
相关产品推荐

