Rob*_*b N 5 unicode normalization cjk unicode-normalization
我正在编写一些处理汉字的Java代码,但得到了一些意想不到的结果-应该相等的字符串却不是。这是令人反感的字符之一,表示“六个”(拼音:liù):?。该字符可以用以下两个代码点之一表示:
块中的F9D1:CJK兼容表意文字
516D块中:CJK统一表意文字
维基百科上有关于这些字符范围的页面,关于兼容性表意文字的简短部分确实提到了一些重复项,但列表中省略了该特定字符。
所以我想知道:
只需将它们标准化即可。在四种归一化方案中的任何一种下,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}
Run Code Online (Sandbox Code Playgroud)
许多基本的 Unicode 工具(包括那些)都可以在这里找到。