ANSI文件在Synapse读取失败,求ADF转码或Synapse兼容方案
解决ANSI编码文件在Azure Synapse/Blob存储中读取失败的问题
方案1:ADF复制时直接转码为UTF-8
这是最省心的解决方式,让ADF在复制过程中自动完成编码转换:
- 保持SFTP源数据集的编码配置为
windows-1252(对应ANSI) - 把Blob目标数据集的编码改成
UTF-8,不要和源编码一致 - 重新运行复制活动,完成后Blob里的文件就是UTF-8编码,Synapse和Blob直接读取都不会报错
方案2:用ADF数据流处理转码(适合复杂场景)
如果复制活动的自动转码没生效(比如文件里有特殊字符),用数据流来处理:
- 新建数据流,源连接SFTP的ANSI数据集(编码选
windows-1252) - 不需要额外转换的话,直接加目标连接Blob的UTF-8数据集;如果需要清理特殊字符,加个「派生列」或「替换字符」转换处理
- 运行数据流活动,转码后的文件就能正常被Synapse读取
方案3:Synapse读取时指定ANSI编码
如果不想转码,直接读取原始ANSI文件,要在读取语句里明确指定编码:
- 使用
OPENROWSET读取时,加上CODEPAGE = '1252'参数,示例代码:
SELECT * FROM OPENROWSET( BULK 'https://yourstorageaccount.blob.core.windows.net/yourcontainer/yourfile.csv', FORMAT = 'CSV', CODEPAGE = '1252', FIRSTROW = 2 -- 如果有表头的话 ) AS [result]
- 如果是通过Synapse数据集读取,在数据集的文件格式设置里把编码改成
windows-1252,同时确认分隔符、引号规则和文件完全匹配
方案4:排查特殊字符导致的报错
报错指向行19列6的无效值,大概率是该位置有ANSI特有的特殊字符(比如智能引号、非标准符号):
- 下载文件到本地,用Notepad++定位到对应位置,查看具体字符
- 在ADF里加个「替换字符」转换,把这些特殊字符替换成Synapse能识别的普通字符
- 或者在Synapse读取时,用
REPLACE函数处理该列的异常字符
内容的提问来源于stack exchange,提问作者user28397663
相关产品推荐
相关产品推荐

