Entries

pythonで半角英数字から全角英数字へ変換

pythonで全角英数字を半角英数字に変換する場合は import unicodedata をして normalize を使えばシンプルに出来るけど、逆に半角英数字を全角英数字にする場合は abnormalize というのが無いので、どうやるのがシンプルなんだろうと調べてみたら次のような方法が良さげでした。

s = u'ABCabc123123!@#$!@#$'
t = dict((0x0020 + ch, 0xff00 + ch) for ch in range(0x5f))
t[0x0020] = 0x3000
print s.translate(t)

sには変換したいユニコード文字列が入っていて、tの辞書で置換するんですが、全角スペースは0xff00では無いので例外処理しないといけません。
このやり方なら少し変更するだけで unicodedata を使わずに全角英数字から半角英数字への変換も出来ますね。

s = u'ABCabc123123!@#$!@#$'
t = dict((0xff00 + ch, 0x0020 + ch) for ch in range(0x5f))
t[0x3000] = 0x0020
print s.translate(t)

この場合、normalizeと違って半角カナは変更しません。
この記事に対してトラックバックを送信する(FC2ブログユーザー)
http://cuio.blog2.fc2.com/tb.php/2165-30e0893c

0件のトラックバック

2件のコメント

[C2297]

unicodedata normalizeは半角にするのが目的じゃなくてunicode正規化をするためのものだから、
「揺らぎをなくして何らかの正規化をしたい。それがたまたまunicode正規化で、その中でたまたま半角になっている」のと、「全角<->半角変換を相互にしたい」のは微妙に違うような。
unicode正規化はpythonの規格じゃないので、perlでもrubyでもjavaでも誰がやっても同じになるはずというかならないといけない。

[C2298]

もちろんnormalizeは正規化が目的で、結果として全角から半角に変換出来るというのは分かってるよ。
全角と半角を相互に変換する場合は本文に書いてる通りtranslateが便利。

コメントの投稿

投稿フォーム
投稿した内容は管理者にだけ閲覧出来ます

Appendix

プロフィール

jin

  • Author: jin
  • 横浜市 → Sunnyvale → Irvine → 目黒区

月別アーカイブ