【问题标题】:How to replace uni code character in ssis package如何替换 ssis 包中的 unicode 字符
【发布时间】:2019-03-04 16:38:59
【问题描述】:

我正在尝试将 DAT 文件加载到 sql server 表。DAT 文件的特定列在文件的特定列中具有 �。我正在尝试使用派生列转换中的表达式替换此字符。 以下是表达式。

(DT_STR,1000,1252) REPLACE( [Comments] ,N'�','') 

这是抛出错误,表达式没有得到评估。 任何人都可以在这里帮助我。 非常感谢

【问题讨论】:

  • 听起来您正在使用错误的编码加载物理文件。例如,您是否尝试读取 UTF-8 文件但在 SSIS 中指定它具有 UTF-16 编码?
  • � 是读取无效代码点序列时的替换字符。它通常只是一个视觉占位符,在 SSIS 中实际上可能不是U+FFFD REPLACEMENT CHARACTER,这将使它不受您的替换呼叫的影响。如果文件的编码不只是错误,您可能需要使用十六进制查看器仔细查看文件的字节。

标签: sql-server unicode ssis etl flat-file


【解决方案1】:

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

(1) 更改文件编码

如 cmets 中所述, 是所选编码中无效字符的替换。

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

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

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

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

(2) 删除不需要的字符

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

或者您应该使用脚本组件或派生列删除这些字符:

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

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

其他信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-04
    • 1970-01-01
    • 2018-04-19
    • 2011-04-26
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    • 2018-12-16
    相关资源
    最近更新 更多