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 个字符除外:
字符名称(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中指定的字符名称。
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 数据库中,那么同一字符可能存储为数据库中的不同代码点。