我正在编写一些处理中文字符的Java代码,我得到了一些意想不到的结果 - 应该相等的字符串不是。这是一个令人不快的角色,意思是“六”(拼音:liù):六。这个字符可以用两个代码点中的任何一个来表示:
块中的F9D1:CJK Compatibility Ideographs
块中的516D:CJK Unified Ideographs
维基百科有关于这些字符范围的page,关于兼容性表意文字的简短部分确实提到了一些重复,但列表省略了这个特定的字符。
所以我想知道:
答案 0 :(得分:2)
将它们标准化。在四种标准化方案中的任何一种情况下,U + F9D1变为U + 516D:
$ export PERL_UNICODE=S
$ perl -le 'print "\x{F9D1}\x{516D}"' | uniquote -v
\N{CJK COMPATIBILITY IDEOGRAPH-F9D1}\N{CJK UNIFIED IDEOGRAPH-516D}
$ perl -le 'print "\x{F9D1}\x{516D}"' | nfd | uniquote -v
\N{CJK UNIFIED IDEOGRAPH-516D}\N{CJK UNIFIED IDEOGRAPH-516D}
$ perl -le 'print "\x{F9D1}\x{516D}"' | nfc | uniquote -v
\N{CJK UNIFIED IDEOGRAPH-516D}\N{CJK UNIFIED IDEOGRAPH-516D}
$ perl -le 'print "\x{F9D1}\x{516D}"' | nfkd | uniquote -v
\N{CJK UNIFIED IDEOGRAPH-516D}\N{CJK UNIFIED IDEOGRAPH-516D}
$ perl -le 'print "\x{F9D1}\x{516D}"' | nfkc | uniquote -v
\N{CJK UNIFIED IDEOGRAPH-516D}\N{CJK UNIFIED IDEOGRAPH-516D}
可以使用许多重要的Unicode工具,包括那些工具here。