2012-03-20 4 views
4

私は漢字を扱ういくつかのJavaコードを書いている、と私はいくつかの予期しない結果だ - 文字列と等しくあるべきではなかったです。 (:LIUピンイン):ここでは「6」を意味し、問題の文字の一つである六。ブロック内は、中国のUnicode文字列を比較しますか?

F9D1:ブロック内CJK Compatibility Ideographs
516D:CJK Unified Ideographs

ウィキペディアは、これらの文字範囲約page、及び互換表意文字に短いセクションがあり、この文字は2つのコード・ポイントのいずれかで表すことができます。いくつかの重複については言及していますが、リストにはこの特定の文字は省略されています。

だから私は思ったんだけど:私はそれらを比較しようとする前に文字列を変換することができるように

  1. が重複したUnicode文字のリストがどこかにありますか?
  2. CJK文字を扱うとき、これが普通なのか、私は間違って何かを行っていますか?

答えて

2

ちょうどそれらを正規化します。 U + F9D1は4つの正規化スキームのいずれかに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ご利用いただけます。

+0

感謝。クラスjava.text.NormalizerでJavaの同等のものが見つかりました。 –

+0

@RobNはい、そうです。申し訳ありませんが、私は言及しませんでした。私はあなたがどこにいたかを知っていると思っていました。私は正規化がそれを処理することを示すことを試みていました。 – tchrist