2

我在将 unicode 数据转换为国家字符时遇到问题。当我使用 national-of 函数将 Unicode 数据转换为国家级时,字符串后面会附加一些像 @ 这样的垃圾字符。

例如 Ws-unicode pic X(200) Ws-national pic N(600)

--让Ws-Unicode中的值为これらの変更は。从java端获取。

将函数 national-of (Ws-unicode ,1208) 移动到 Ws-national。

--转换后的值就像これらの変更は@。

我不希望在转换后添加额外的 @ 字符。

请帮我找出可能的解决方案,我尝试使用inspect子句将N'@'替换为空格。它运行良好,但在某些特定情况下失败了,比如如果我们在用户端输入 @ 。在那种情况下,真正的@也转换为空格。

4

2 回答 2

3

下面是我用来将 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 低值,当查看大型机上的实际十六进制时

于 2017-04-26T17:36:25.843 回答
-1

在第一次出现 @ 后使用反向检查并停止

于 2017-04-26T15:02:07.990 回答