Hatena::ブログ(Diary)

西尾泰和のはてなダイアリー

2012-01-27

Pythonサロゲートペアの範囲の数値実体参照を文字に戻す

𠮟 (𠮟)が数値実体参照で表現されているのをPythonのUnicode文字に戻すのにどうするの?という質問について。普通にunichr(134047)したら以下のような例外が飛ぶ。

ValueError: unichr() arg not in range(0x10000) (narrow Python build)

(narrow Python build)と書かれているように、これってコンパイル時のオプションに依存する挙動で、下記のオプションを付けてビルドしなおせば解決する。もしくはPython3を使うか。

./configure --enable-unicode=ucs4

とはいえ、ビルドしなおすのも3にするのも嫌だったりするわけなので解決方法を調べてみた。

>>> code = 134047
>>> "%08x" % code
'00020b9f'

>>> ("\U" + "%08x" % code).decode("unicode-escape")
u'\U00020b9f'

>>> print _
叱 

できたできた。ちなみにコードの最後の叱が𠮟ではないのは、はてなダイアリーが𠮟を勝手に実体参照に置き換えてしまって正しい表示ができないので、なるべく見た目が近いように書き換えた為です。

ref. ValueError: unichr() arg not in range(0x10000) (narrow Python build), please help - Stack Overflow

see also: PEP 261 -- Support for "wide" Unicode characters

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/nishiohirokazu/20120127/1327646600