如何在SSIS包中替换Unicode字符

3
我将尝试将DAT文件加载到SQL Server表中。该DAT文件的特定列在某一列中有一个“�”字符。我正在尝试使用派生列转换中的表达式替换此字符。 以下是表达式。
(DT_STR,1000,1252) REPLACE( [Comments] ,N'�','') 

出现了错误,表达式无法得到求值。 有人能帮我吗? 非常感谢。


听起来你正在使用错误的编码加载物理文件。例如,你是否尝试读取一个UTF-8编码的文件,但在SSIS中指定了它是UTF-16编码? - Thom A
2
�是当读取到无效的代码点序列时的替换字符。它通常只是一个可视化占位符,在SSIS中可能实际上并不是U+FFFD REPLACEMENT CHARACTER,这将使其免受您的替换调用影响。如果文件的编码不仅仅是错误的,则可能需要使用十六进制查看器更仔细地查看文件的字节。 - Jeroen Mostert
1个回答

0

我认为你应该尝试两种方法:

(1) 更改文件编码

如评论中所述, 是在所选编码中替换无效字符的结果。

首先,请检查列数据类型是否为 DT_WSTR 而不是 DT_STR**

此外,尝试将编码设置为 Unicode 或尝试使用编码检测工具,例如:

但我认为到目前为止还没有一个强大的编码检测应用程序或库支持所有编码

要更改扁平文件连接管理器的编码,您可以勾选Unicode复选框或从下拉列表中选择代码页:

enter image description here

(2)删除不需要的字符

如果您没有编码问题并且知道正确的文件编码,如果文件创建不正确,则这些字符没有意义且无法还原,您必须检查文件创建操作并检查数据源编码或排序规则与平面文件编码之间是否存在问题或差异。

或者您可以使用脚本组件或派生列来删除这些字符:

(DT_WSTR,1000)REPLACE([Comments] ,"�","") 

*注意:在标记之前不要使用N文字,也不要转换为DT_STR,因为可能有其他无法转换的Unicode字符。

附加信息


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接