编码字符集之间的数据转换
IBM® MQ 定义的格式 (也称为内置格式) 中的消息数据可以由队列管理器从一个编码字符集转换为另一个编码字符集,前提是这两个字符集都与单一语言或一组类似语言相关。
例如,支持在具有标识 (CCSID) 850 和 500 的编码字符集之间进行转换,因为两者都适用于西欧语言。
对于 EBCDIC 换行符 (NL) 字符到 ASCII 的转换,请参阅 mqs.ini 文件的所有队列管理器节 和 AMQ_CONVEBCDICNEWLINE 环境变量。
在 数据转换处理中定义了受支持的转换。
在 IBM MQ Appliance, Windows, Linux®和 macOS上支持在 CCSID 37 和 500 之间进行转换。
当队列管理器无法转换内置格式的消息时
如果消息的 CCSID 表示不同的本地语言组,那么队列管理器无法自动转换内置格式的消息。 例如,不支持 CCSID 850 与 CCSID 1025 (这是使用西里尔文脚本的语言的 EBCDIC 编码字符集) 之间的转换,因为一个编码字符集中的许多字符不能在另一个编码字符集中表示。 如果您具有以不同本地语言工作的队列管理器网络,并且不支持在某些编码字符集之间进行数据转换,那么可以启用缺省转换。
对于 ccsid_part2.tbl 适用的平台,请参阅 指定缺省数据转换 使用 ccsid_part2.tbl 以获取更多信息。 缺省数据转换中描述了除 ccsid_part2.tbl 文件适用的平台以外的平台上的缺省数据转换。
ccsid_part2.tbl 文件
提供了其他文件 ccsid_part2.tbl。
ccsid_part2.tbl 文件优先于 ccsid.tbl 文件,并且:- 允许添加或修改 CCSID 条目
- 指定缺省数据转换
- 指定其他命令级别的数据
Linux - 所有版本
Windows
在 IBM MQ for Windows 上, ccsid_part2.tbl 默认位于 MQDataRoot\conv\table 目录中。 此外,在 IBM MQ for Windows 上,它会记录所有受支持的代码集。
在 IBM MQ for Linux 上, ccsid_part2.tbl 位于目录 MQDataRoot/conv/table 中,支持的代码集保存在 IBM MQ 提供的转换表中。
虽然 ccsid_part2.tbl 文件将替换先前版本的 IBM MQ 中用于提供其他 CCSID 信息的现有 ccsid.tbl 文件,但 ccsid.tbl 文件将继续由 IBM MQ 解析,因此不得删除。
更多信息,请参阅 ccsid_part2.tbl 文件。
ccsid.tbl 文件
ccsid_part2.tbl 应用的平台以外的平台上,文件 ccsid.tbl 用于以下目的:
在 AIX® 上,支持的代码集由操作系统内部保存。- 它指定任何其他代码集。 要指定其他代码集,您需要编辑 ccsid.tbl (在文件中提供了有关如何执行此操作的指导)。
- 它指定任何缺省数据转换。
您可以更新 ccsid.tbl中记录的信息; 例如,如果操作系统的未来发行版支持其他编码字符集,那么可能需要执行此操作。
缺省数据转换
如果在通常不支持数据转换的两台机器之间设置通道,那么必须启用缺省数据转换才能使通道正常工作。
在 ccsid_part2.tbl 适用的平台以外的平台上,要启用缺省数据转换,请编辑 ccsid.tbl 文件以指定缺省 EBCDIC CCSID 和缺省 ASCII CCSID。 有关如何执行此操作的指示信息包含在文件中。 必须在将使用通道连接的所有机器上执行此操作。 重新启动队列管理器以使更改生效。
- 如果源 CCSID 和目标 CCSID 之间的转换不受支持,但源环境和目标环境的 CCSID 都是 EBCDIC 或 ASCII ,那么字符数据将传递到目标应用程序而不进行转换。
- 如果一个 CCSID 表示 ASCII 编码字符集,另一个表示 EBCDIC 编码字符集,那么 IBM MQ 使用 ccsid.tbl中定义的缺省数据转换 CCSID 来转换数据。
转换用户定义格式的消息
队列管理器无法将用户定义格式的消息从一个编码字符集转换为另一个编码字符集。 如果需要以用户定义的格式转换数据,那么必须为每种此类格式提供数据转换出口。 请勿使用缺省 CCSID 来转换用户定义格式的字符数据。 有关以用户定义格式转换数据和写入数据转换出口的更多信息,请参阅 编写数据转换出口。
更改队列管理器 CCSID
当您使用 ALTER QMGR 命令的 CCSID 属性来更改队列管理器的 CCSID 时,请停止并重新启动队列管理器,以确保停止并重新启动所有正在运行的应用程序 (包括命令服务器和通道程序)。
这是必需的,因为更改队列管理器 CCSID 时正在运行的任何应用程序都将继续使用现有 CCSID。