NKF_pythonで半角文字の変換

  • March 06, 2009 20:00

前回の続き、

ueBLOG | Pythonで機種依存文字を含む文字列を半角から全角へ

NFK_pythonにはguessという文字コードを判別してくれる関数があるのですが、

>>> b = "ナイトウあいう".decode("utf8").encode("sjis") #僕のipythonの内部コードがutf8のためutf8でdecode
>>> b
'ナイトウ\x82\xa0\x82\xa2\x82\xa4'
>>> print b
ナイトウあいう
>>> nkf.guess(b)
'Shift_JIS'

これは半角だけの文字だと上手く判別してくれません。

>>> a = "ナイトウ".decode("utf8").encode("sjis")
>>> nkf.guess(a)
'EUC-JP'

しかも、全角文字が入っているものは文字コード変換できるけど、半角だけだと上手くいきません

>>> print nkf.nkf("-sx", b)
ナイトウあいう
>>> print nkf.nkf("-sx", a)
轍蝶

これはやはり元のコードを知っていないとだめなようです。

-J -E -S -W
期待される入力コードの性質を指定する。 -J ISO-2022-JP を仮定する。 -E 日本語 EUC (AT&T) を仮定する。 -S Shift_JIS を仮定する。 いわゆる半角カナ (JIS X 0201 片仮名)も受け入れる。 -W UTF-8 を仮定する。

というわけで、sjisを期待するためにSをオプションでつければちゃんと表示されました。

>>> print nkf.nkf("-sxS", a)
ナイトウ

文字コードが自動判別できないとなると、nkfを使う理由が少し、、、、、

オレ、今度生まれるときはマルチバイト文字がない国に生まれるんだ、、、、、