Db2 如何在cobol中从国家数据类型中删除@字符
在将unicode数据转换为国家字符时,我面临一个问题。 当我使用national of函数将Unicode数据转换为national时,字符串后面会附加一些垃圾字符,如@ 例如 Ws-unicode picx(200) Ws国家图片编号(600) --让Ws-Unicode中的值为これらの変更は. 从java端获取 将国家功能(Ws-unicode,1208)移动到Ws-national --转换后的值是一样的これらの変更は @. 我不想在转换后添加额外的@字符Db2 如何在cobol中从国家数据类型中删除@字符,db2,cobol,mainframe,db2-zos,Db2,Cobol,Mainframe,Db2 Zos,在将unicode数据转换为国家字符时,我面临一个问题。 当我使用national of函数将Unicode数据转换为national时,字符串后面会附加一些垃圾字符,如@ 例如 Ws-unicode picx(200) Ws国家图片编号(600) --让Ws-Unicode中的值为これらの変更は. 从java端获取 将国家功能(Ws-unicode,1208)移动到Ws-national --转换后的值是一样的これらの変更は @. 我不想在转换后添加额外的@字符 请帮
请帮助我找出可能的解决方案,我已尝试使用inspect子句将N'@'替换为空格。
它工作得很好,但在某些特定场景中失败了,比如我们从用户端输入了@。在这种情况下,正版@也转换为空格。使用inspect with reverse,并在@首次出现后停止。下面是我用来将EBCDIC转换为UTF的代码片段。在捕获字符串长度之前,我还获取了@符号:
STRING
FUNCTION DISPLAY-OF (
FUNCTION NATIONAL-OF (
WS-EBCDIC-STRING(1:WS-XML-EBCDIC-LENGTH)
WS-EBCDIC-CCSID
)
WS-UTF8-CCSID
)
DELIMITED BY SIZE
INTO WS-UTF8-STRING
WITH POINTER WS-XML-UTF8-LENGTH
END-STRING
SUBTRACT 1 FROM WS-XML-UTF8-LENGTH
这段代码的作用是将EBCIDIC字符串的UTF8表示形式串入另一个变量。WITH POINTER子句将捕获字符串的新长度+1(+1,因为指针位于字符串结束后的下一个位置)
使用此方法,您应该能够确切地知道第二个字符串的长度,并使用该字符串的确切长度
这将删除不需要的@s
编辑:
有一件事我忘了提,在我的例子中,@符号实际上是在大型机上查看实际十六进制时的EBCDIC低值这并没有解决他为什么要处理这个角色的实际问题“我尝试使用inspect子句将N'@'替换为空格。它工作得很好,但在某些特定场景中失败了,比如我们从用户端输入了@。在这种情况下,正版@也转换为空格。“这就是他所说的是的,但是在第一时间停下来对他有什么帮助?他还说,@被追加到字符串的末尾,因此您的解决方案实际上会删除用户创建的@。我认为OP需要在这里找到一个实际解决问题的方法,而不是把一个创可贴放在上面。我猜想,在字符串被转换成@符号之后,有十六进制字符。请确保仅针对实际字符串字符串使用该函数Ws-Unicode从何处获取其值?Ws-Unicode是我的存储过程的输入参数,Ws-Unicode中的值来自java端感谢@Sagging的建议,但在我的情况下,输入参数的CCSID已经是Unicode,Ws-Unicode在IPARM2 VARCHAR(200)中定义为对于混合数据,“CCSID UNICODE”。但我今天将努力实施你的建议。谢谢again@RamaGaur它应该仍然有效。如果您使用正确的CCSID。我想得到的就是用指针串起来的方法。那么你就知道确切的长度了。谢谢@Sagging,在你的帮助下已经整理好了,实际上我们正在从用户端获取Unicode数据,然后将数据保存到表中(具有国家数据类型)。因此,我所做的是“将National of(Ws-unicode(1:Ws-unicode长度),1208)移动到Ws-National。它现在起作用了。我的字符串中没有额外的@字符。我认为@字符是在我们将空间转换为国家数据时出现的。太棒了!我很高兴这有帮助