您的导入有几件事可能会出错。首先,您必须知道原始文件的编码:
如何检测文本文件的编码/代码页
编码将确定 char 的实际大小(以字节为单位),更重要的是每个字符的存储方式。您会看到,四个字符的 unicode 字符串可以是 4 个字节到 16 个字节(如果您有复合字符,可能更多),具体取决于编码。int 通常是四个字节(DT_I 4),但 ssis 最多为您提供 32 个字节(我认为)。因此,当您将未知数量的字节加载到预定的 unsigned int 中时,某些内容可能会被截断,最终得到垃圾值。
如果您不知道或找不到编码,我会假设它是 UTF-8,但这确实不是一个好习惯。这是关于它的一点点:http ://en.wikipedia.org/wiki/UTF-8
您还可以查看不同编码的 unicode 字符集(UTF-8、UTF-16 ..)并查看对于“}”字符及其匹配值。这可能会提示您为什么会出现它。
然后你的平面文件源应该匹配那种类型的编码。选中(或取消选中)Unicode复选框以设置它/或选择“代码页”。然后将该列的值加载到一个字符串(正确的编码)中,而不是一个无符号整数。
最后,当您知道自己拥有正确的值时,您可以使用“数据转换”将其转换为无符号整数或其他任何东西。
编辑: “数据转换”将根据其名称转换您导入的值。这可能不起作用,具体取决于原始文件的编写方式。“派生列”转换将是您的另一个选项,它不会更改实际值,只需告诉编译器将这些位解释为另一种类型(无符号整数)。