Ibm midrange '@';在两个不同的ibm服务器(AS400)中以不同的方式显示

Ibm midrange '@';在两个不同的ibm服务器(AS400)中以不同的方式显示,ibm-midrange,Ibm Midrange,我试图在两个不同的iseries服务器中生成xml。两台服务器具有相同的CCSID。但当xml被框定时,“@”字符将被转换为其他字符。在另一台服务器中,它显示正确。两台服务器都处于相同的PTF级别,甚至两台服务器的java版本也相同。 服务器之间可能有什么不同?如何检查差异? 为什么“@”会被转换为其他字符,而只有一台服务器上的字符也是如此?这听起来像是CCSID问题。 tl;dr CCSID存储在IBMi上的多个位置,根据数据来自何处,您可以有多个位置进行检查 系统值-QCCSID是系统默认的

我试图在两个不同的iseries服务器中生成xml。两台服务器具有相同的CCSID。但当xml被框定时,“@”字符将被转换为其他字符。在另一台服务器中,它显示正确。两台服务器都处于相同的PTF级别,甚至两台服务器的java版本也相同。 服务器之间可能有什么不同?如何检查差异?
为什么“@”会被转换为其他字符,而只有一台服务器上的字符也是如此?

这听起来像是CCSID问题。

tl;dr
CCSID存储在IBMi上的多个位置,根据数据来自何处,您可以有多个位置进行检查

系统值-
QCCSID
是系统默认的CCSID,但它只在某些情况下起作用,因此它们应该是相同的,但这不是全部。请注意,许多已经存在很长时间的系统都将QCCSID设置为65535

作业CCSID-每个作业都有自己的CCSID,默认为系统CCSID,但可以通过用户配置文件或
SBMJOB
命令进行修改。但这并不是CCSID工作的全部内容。如果作业CCSID为65535,则基于
LANGID
设置作业默认CCSID。对于我的系统,
LANGID
为ENU,作业默认CCSID为37

数据库-每个数据库表都指定了一个CCSID。对于在
CRTPF
命令中指定的DDS,对于SQL,使用作业默认CCSID。此外,每个字符数据列都可以指定自己的CCSID

设备文件与数据库文件一样,设备文件可以在文件级和字段级指定自己的CCSID

问题是,
@
字符不是不变字符集的一部分,因此它可以在不同的CCSID中以不同的方式显示,特别是如果混合中有CCSID 65535。65535表示不转换。您需要确保CCSID在所有方面都是相同的,如果其中有65535,那么它们都是相互一致的


CCSID 65535的最终注释。这是系统中只有一种语言的时代遗留下来的。那时,不转换字符集没有问题,因为使用该系统的每个人都讲相同的语言。如今,系统以各种方式连接,数据通过PC和web共享,CCSID变得非常重要,因为即使系统中的每个人都讲同一种语言,由于PC、IFS、XML、Unicode、,等等。最好将系统CCSID设置为65535以外的值。

这听起来像是CCSID问题。

tl;dr
CCSID存储在IBMi上的多个位置,根据数据来自何处,您可以有多个位置进行检查

系统值-
QCCSID
是系统默认的CCSID,但它只在某些情况下起作用,因此它们应该是相同的,但这不是全部。请注意,许多已经存在很长时间的系统都将QCCSID设置为65535

作业CCSID-每个作业都有自己的CCSID,默认为系统CCSID,但可以通过用户配置文件或
SBMJOB
命令进行修改。但这并不是CCSID工作的全部内容。如果作业CCSID为65535,则基于
LANGID
设置作业默认CCSID。对于我的系统,
LANGID
为ENU,作业默认CCSID为37

数据库-每个数据库表都指定了一个CCSID。对于在
CRTPF
命令中指定的DDS,对于SQL,使用作业默认CCSID。此外,每个字符数据列都可以指定自己的CCSID

设备文件与数据库文件一样,设备文件可以在文件级和字段级指定自己的CCSID

问题是,
@
字符不是不变字符集的一部分,因此它可以在不同的CCSID中以不同的方式显示,特别是如果混合中有CCSID 65535。65535表示不转换。您需要确保CCSID在所有方面都是相同的,如果其中有65535,那么它们都是相互一致的


CCSID 65535的最终注释。这是系统中只有一种语言的时代遗留下来的。那时,不转换字符集没有问题,因为使用该系统的每个人都讲相同的语言。如今,系统以各种方式连接,数据通过PC和web共享,CCSID变得非常重要,因为即使系统中的每个人都讲同一种语言,由于PC、IFS、XML、Unicode、,等等。最好将系统CCSID设置为65535以外的值。

谢谢您的回答。我已经交叉验证了两台服务器中的CCSID(服务器有问题,服务器工作正常)。两台服务器具有相同的系统ccsid和作业ccsid。我们将向java发送一个dataq来生成xml。在Qsnddtaq(从这里我们将数据发送到Java)之前,“@”符号将正确显示。只有在XML(由java程序生成)中,才会将其更改为“§”。这是AS400的问题还是Java的问题?谢谢你的回答。我已经交叉验证了两台服务器中的CCSID(服务器有问题,服务器工作正常)。两台服务器具有相同的系统ccsid和作业ccsid。我们将向java发送一个dataq来生成xml。在Qsnddtaq(从这里我们将数据发送到Java)之前,“@”符号将正确显示。仅在XML中(由java程序生成)