强制使用数据传输实用程序上的Unicode for iSeries AS400 for TSV制表符分隔文件

时间:2014-02-15 07:47:00

标签: encoding ibm-midrange

我正在为IBM i使用数据传输实用程序,以便从我的AS400创建TSV文件,然后将它们导入我的SQl服务器数据仓库。

在此之后:SO Question about SSIS encoding script我想停止在SSIS任务中使用转换并从源中准备好数据。

我曾尝试在TSV创建中使用大量的代码页(1200等),但1208只有一半的技巧:它创建了UTF8然后我必须转换为unicode,如另一个问题所示。

从一开始我必须使用什么CCSID才能获得unicode?

实用程序截图:

enter image description here

3 个答案:

答案 0 :(得分:3)

在IBM i上,CCSID支持旨在实现无缝连接。想象一下表格采用德语编码的情况,您的工作是英语,而您正在用法语创建一个新表 - 所有这些都在默认编码为中文的系统上。为每个使用适当的CCSID,操作系统将为您进行字符编码转换。

不幸的是,很多中端系统都没有正确配置。他们的系统默认CCSID是“没有CCSID /二进制”。 - 大约20年前,在CCSID支持之前的剩余时间。 DSPSYSVAL QCCSID将告诉您系统的默认CCSID。如果它是65535,那就是二进制'。这不会导致问题的结束,因为操作系统无法确定真正的字符编码是什么。由于CCSID(65535)已设置多年,因此系统上几乎所有表都具有此编码。系统上的所有作业都以此编码运行。当系统上的所有内容都是65535时,那么操作系统不需要进行任何字符转换,而且一切似乎都很好。

然后,有人需要多字节字符。它可能是一种亚洲语言,或者就像你的情况一样,是Unicode。如果整个系统是二进制/无转换'它可能非常令人沮丧,因为从本质上讲,系统管理员已经对操作系统欺骗了对数据库和作业有影响的字符编码。

我猜你正在处理CCSID(65535)环境。我想你将不得不要求一些改变。至少,使用适当的CCSID(如EBCDIC US English(37))创建一个新/工作表。使用CPYF等系统实用程序填充此表。现在尝试下载,使用CCSID,例如,13488.如果这样做你需要的,那么你可能只需要一个中间表来传递你的数据。

最终,正确的解决方案是适当的CCSID配置。让管理员设置QCCSID系统值并考虑更改现有表的编码。之后,系统将按预期无缝地处理多种编码。

答案 1 :(得分:1)

IBM i上的CCSID名为13488,是Unicode类型UCS-2(UTF-16 Big Endian)。没有“一个unicode” - 有几种类型的Unicode格式。我看了你的另一个问题。 1208也是Unicode UTF-8。那么究竟是什么意思“开始使用Unicode”并不清楚(你是以UTF-8格式开始获取Unicode) - 但后来我读了你的另一个问题,你提到的功能并没有说明是什么类型的它希望“unicode”:

using (StreamWriter writer = new StreamWriter(to, false, Encoding.Unicode, 1000000))  

IBM i上的操作系统默认主要是将数据存储在EBCDIC数据库表中,并且有一些罕见的应用程序构建在此系统上以便本机使用Unicode。它会将数据转换为它支持的任何类型的Unicode。

至于SQL Server和Java - 我相当肯定他们使用UCS-2类型的Unicode,所以如果你尝试在AS / 400端使用CCSID 13488进行传输,它可能会让你避免从UTF-8 Unicode的额外转换因为CCSID 13488是UCS-2样式的Unicode。

答案 2 :(得分:0)

https://www-01.ibm.com/software/globalization/ccsid/ccsid_registered.html

系统i 1208和1209上有两个用于UTF-8 unicode的CCSID。1208是UTF-8,IBM PAU 1209用于UTF-8。见上面的链接。