CCSID 943 的备用 Unicode 转换表

有几个 IBM® 编码字符集标识 (CCSID) 用于日语代码页。 CCSID 943 注册为 Microsoft 日语 Windows Shift-JIS 代码页。 在 CCSID 943 与 Unicode 之间转换字符时,您可能会遇到下列两个问题。 这些问题是 IBM 代码页转换表与 Microsoft 代码页转换表之间存在差异的结果。

问题 1:

由于历史原因,在 CCSID 943 代码页中,有 300 多个字符可以由两种或三种代码点来表示。 在使用输入方法编辑器(IME)和代码页转换表时,将只输入这些等同代码点的其中一个代码点。 例如,罗马数字 1 (i) 的小写字符具有两个等效代码点 :X'EEEF '和 X'FA40'。 Microsoft Windows IME 始终在输入 i 时生成 X'FA40'。 通常, IBM 和 Microsoft 使用相同的主代码点来表示字符,但以下 13 个字符除外:

表 1. CCSID 943 Shift-JIS 代码点转换
字符名称(Unicode 代码点) IBM 主 Shift-JIS 代码点 Microsoft Shift-JIS 主代码点
罗马数字 1(U+2160) X'FA4A' X'8754'
罗马数字 2(U+2161) X'FA4B' X'8755'
罗马数字 3(U+2162) X'FA4C' X'8756'
罗马数字 4(U+2163) X'FA4D' X'8757'
罗马数字 5(U+2164) X'FA4E' X'8758'
罗马数字 6(U+2165) X'FA4F' X'8759'
罗马数字 7(U+2166) X'FA50' X'875A'
罗马数字 8(U+2167) X'FA51' X'875B'
罗马数字 9(U+2168) X'FA52' X'875C'
罗马数字 10(U+2169) X'FA53' X'875D'
带括号有(U+3231) X'FA58' X'878A'
数字符(U+2116) X'FA59' X'8782'
电话符(U+2121) X'FA5A' X'8784'

IBM 产品 (例如 Db2® 数据库管理器) 主要使用 IBM 代码点 (例如 X'FA4A') 来显示大写罗马数字 I,但 Microsoft 产品使用 X'8754' 来表示相同的字符。 Microsoft ODBC 应用程序可以将 I 字符作为 X'8754 '插入到 CCSID 为 943 的 Db2 数据库中,而 IBM Data Studio 可以将与 X'FA4A' 相同的字符插入到相同的 CCSID 943 数据库中。 但是, Microsoft ODBC 应用程序只能找到那些将 I 编码为 X'8754 '的行,而 IBM Data Studio 只能找到那些将 I 编码为 X'FA4A' 的行。 要使 IBM Data Studio 能够选择 I 作为 X'8754 ' ,您需要将从 Unicode 到 CCSID 943 的缺省 IBM 转换表替换为 Db2 数据库管理器提供的备用 Microsoft 转换表。

问题 2:

以下字符列表 (从 CCSID 943 转换为 Unicode 时) 将根据使用 IBM 转换表还是 Microsoft 转换表而产生不同的代码点。 对于这些字符, IBM 转换表符合日本行业标准 JISX0208, JISX0212和 JISX0221中指定的字符名称。

表 2. CCSID 943 到 Unicode 代码点转换
Shift-JIS 代码点(字符名称) IBM 主代码点 (Unicode 名称) Microsoft 主代码点 (Unicode 名称)
X'815C'(EM 破折号) U+2014(EM 破折号) U+2015(水平线)
X'8160'(波浪线) U+301C(波浪线) U+FF5E(全宽颚音符号)
X'8161'(双竖线) U+2016(双竖线) U+2225(平行号)
X'817C'(减号) U+2212(减号) U+FF0D(全宽连字符-减号)
X'FA55'(竖杠) U+00A6(竖杠) U+FFE4(全宽竖杠)

例如,当使用 IBM 转换表时,带有 CCSID 943 代码点 X'815C' 的字符 EM 短划线会转换为 Unicode 代码点 U+2014 ,但当使用 Microsoft 转换表时,会转换为 U+2015 。 这可能会为 Microsoft ODBC 应用程序创建潜在问题,因为它们会将 U+2014 视为无效代码点。 为了避免这些潜在问题,您需要将从 CCSID 943 到 Unicode 的缺省 IBM 转换表替换为 Db2 数据库管理器提供的备用 Microsoft 转换表。

应该将 CCSID 943 和 Unicode 之间的备用 Microsoft 转换表的使用限制在已关闭的环境中,在这些环境中, Db2 客户机和 Db2 数据库正在运行 CCSID 943 ,并且全部使用相同的备用 Microsoft 转换表。 如果您有一个使用缺省 IBM 转换表的 Db2 客户机和另一个使用备用 Microsoft 转换表的客户机,并且这两个客户机都将数据插入到 CCSID 为 943 的同一 Db2 数据库中,那么同一字符可能存储为数据库中的不同代码点。