2016-04-05 5 views
0

'É'(E\xcc\x81)と 'É'(\xc3\x89)のコードポイントは異なります。それらは同じに見えますが、一致するかどうかテストすると結果は否定的です。純粋なbashでの文字列の正規化

Pythonは正規化できますが、unicodedata.normalize('NFC', 'É'.decode('utf-8')) == unicodedata.normalize('NFC', 'É'.decode('utf-8'))Trueを返します。それはÉとして印刷されます。

質問:文字列を正規化する方法はありますか純粋なbash *?私はiconvを見てきましたが、私が知っている限り、それはasciiに変換できますが、正規化はできません。

* GNUのbashのあなたが利用可能uconvを持っている場合、それはおそらく仕事やる、バージョン3.2.57(1)-release(x86_64版 - アップル-darwin14))

+1

シェルの文字列処理は、設計上最小限です。 Unicodeの正規化は適合しないので、組み込みの場合は驚くでしょう。 – Jens

+0

あなたは 'iconv'を「純粋なbash」と考えていますか? Pythonと同様に外部プログラムです。 – chepner

+0

申し訳ありませんが、私はOS Xシェルからネイティブで入手可能です。 – user2243670

答えて

1

$ echo -en "E\xcc\x81" | uconv -x Any-NFC | hexdump -C 
00000000 c3 89 
$ echo -en "\xc3\x89" | uconv -x Any-NFC | hexdump -C 
00000000 c3 89 

Any-NFDは分解された形でも利用できます。

+0

残念ながら私はしません( '' uconv "という名前の利用可能な公式はありません) – user2243670

+0

Found uconv。これは[icu4c](http://brewformulas.org/Icu4c)の一部であり、 '/ usr/local/Cellar/icu4c/56.1/bin/uconv'に隠されています。しかし、私はネイティブ(ポータブル)ソリューションに感謝します。 – user2243670

関連する問題