SSIS数据转换丢失扩展ASCII:如何正确转换保留en dash?
解决DT_STR转换时保留En Dash的方法
问题根源是转换时代码页不匹配:Unicode转DT_STR(非Unicode字符串)时,若未指定正确的代码页,En Dash(U+2013)会被转成错误的字节序列,存入varchar后显示为乱码–(这是UTF-8字节被当作Windows-1252解析的结果)。
以下是具体修复步骤:
1. 确认数据库varchar的对应代码页
先查询目标数据库/表的排序规则(collation)对应的代码页:
- 以SQL Server为例,执行以下语句:
SELECT COLLATIONPROPERTY('你的数据库排序规则', 'CodePage')- 结果为1252,对应Windows-1252编码(原生支持En Dash)
- 结果为65001,对应UTF-8编码(也支持En Dash)
2. 在数据转换组件中指定匹配的代码页
在SSIS的「数据转换」组件里,针对目标列做如下设置:
- 将DataType设为
string [DT_STR] - 在「Code Page」下拉框中,选择和数据库排序规则匹配的代码页:
- 对应Windows-1252选
1252 (ANSI - Latin I) - 对应UTF-8选
65001 (UTF-8)
- 对应Windows-1252选
3. 验证转换效果
转换后,Unicode中的En Dash会被正确映射到对应编码的字节:
- Windows-1252中En Dash对应字节
0x96 - UTF-8中En Dash对应字节序列
0xE2 0x80 0x93
存入varchar后,数据库会用对应编码解析字节,即可正常显示En Dash。
常见避坑点
- 不要使用默认代码页(非1252/65001),否则En Dash会被替换为问号或乱码
- 确保数据库排序规则支持En Dash:比如
SQL_Latin1_General_CP1_CI_AS(代码页1)不支持,必须使用代码页1252或65001的排序规则
内容的提问来源于stack exchange,提问作者Gargoyle
相关产品推荐
相关产品推荐

