1. 主页 > 血脉觉醒 >

UPPER 和 UCASE 函数

将字符从不同的代码页转换为大写如果使用特定的代码页,那么当您使用 UPPER 或 UCASE 函数时,代码页中无等价大写形式的字符可能会被转换。 此转换的发生原因是消息解析器将位流转换为 Unicode 消息树。 尽管字符在源代码页中可能没有大写的等价形式,但是它们在 Unicode 代码页中仍旧有大写的等价形式,并且可以由 UPPER 或 UCASE 函数转换。 将位流转换回原始代码页时,系统无法将这些字符转换回去,而是在输出消息中为每个字符插入一个替换字符。 插入的替换字符取决于原始的代码页。 例如,转换为 EBCDIC 代码页时插入 X'3F' 字节,转换为日语代码页时插入 X'7F' 字节。

对于此问题的解决方案是使用 TRANSLATE 函数代替 UPPER 或 UCASE 函数将选中的字符转换为大写。 任何在代码页中没有大写等价形式的字符都不会被转换。

以下示例中,输入消息使用代码页 284,InputRoot.XML.MSG.APPDATA 元素包含在代码页 284 中没有但在 Unicode 代码页中有大写等价形式的字符。 TRANSLATE 函数仅用于将小写字符‘a’到‘z’转换为其等价大写字符。 InputRoot.XML.MSG.APPDATA 中的任何其他字符都不会被转换。DECLARE char1 CHAR;

SET char1 = TRANSLATE(InputRoot.XML.MSG.APPDATA,'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ');

SET OutputRoot.MQMD.CodedCharSetId = 284;

SET OutputRoot.XML.TEST.translated = char1;