1 回答
您可以尝试使用不同的代码页在您的 ccsid424 物理文件上创建一个逻辑文件。在 as/400 上,通过添加关键字 . 可以为各个列创建具有不同代码页的逻辑文件CCSID(<num>)
。您甚至可以将其设置为 unicode 字符集,例如CCSID(1200)
UTF-16。当然,您的物理文件仍然只能存储 424 代码页中的字符,并且这些字符将被一些无效字符 char 替换,但这样翻译可能会更好。
没有办法直接将不在代码页 424 中的字符存储在具有该代码页的列中(我能想到的唯一方法是以某种方式使用多个字符对它们进行编码,但这很可能不是您想要做的,因为它会带来比它“解决”更多的问题)。
如果您可以控制该系统,并且可以进行一些更大的更改,则可以反过来:使用不同名称创建该物理文件的新 unicode 版本(我建议 CCSID(1200),这与您在 as/400 afaik 上接近 UTF-16 一样接近,根据我的经验,系统的所有部分都不支持 UTF-8。IBM 确实推荐 1200 用于 unicode)。比将所有数据从旧文件转移到新文件,删除旧文件(在此之前,备份它!),然后使用旧物理文件的名称在新物理上创建一个逻辑文件。在该逻辑文件中,将所有带有 ccsid 的列从 1200 更改为 424。这样,现有程序仍然可以处理数据。当然,一旦您插入不在 ccsid 424 子集中的数据,逻辑文件中就会出现无效字符;因此,您很可能必须查看所有使用新逻辑文件的程序。