大変悲しいお知らせです。
Pythonはやっぱり日本語に弱い。
今日それがわかり申した。
日本語をバリバリ扱おうと思うとやはり不利だな、こいつは。
http://python.matrix.jp/tips/string/encoding.html
でも、ここらあたりを読むと何とかなりそうな予感。
ファイルからひらがなを読み込み、DOS窓に表示、ファイルに書き出す作業。
これC言語とかならそんなに難しくなかった気がするが、Pythonではめちゃくちゃめんどくさい。
いろいろ調べてみても、スクリプトファイル内で日本語を扱っているものは多々あるが、ファイル関連になるととんと資料がなくなる。
で、どうやらcodecsモジュールというものを使って、ファイルオブジェクトをラップしてあげるとよろしそう。
# -*- encoding : utf-8 -*- import codecs f = open("text.txt", "r") decorded_f = codecs.getreader("utf-8")(f) st = decorded_f.readlines() print st print st[0].encode("mbcs") f.close() f = open("text2.txt", "w") encoded_f = codecs.getwriter("utf-8")(f) for line in st: encoded_f.write(line) f.close()
結果
D:\workspace\Python\3-11>python test.py [u'\ufeff\u3042\u3044\u3046\u3048\u304a\n', u'\u304b\u304d\u304f\u3051\u3053\n', u'\u3055\u3057\u3059\u305b\u305d\n', u'\u305f\u3061\u3064\u3066\u3068\n', u'\u3 06a'] ?あいうえお
text2.txt
あいうえお かきくけこ さしすせそ たちつてと な
となる。
ちなみに読み出し側のファイルはあらかじめUTF-8にエンコードしておいた。
わかったこと
ん〜、難しい。誰か詳しい人がいたら、まとまった情報源をおしえてくだしゃぁ。
パニック。
ちなみに
いつものようにファイルオブジェクトを操作して読み出し書き出しをしようとすると…
# -*- encoding : utf-8 -*- import codecs f = open("text.txt", "r") st = f.readlines() print st print st2[0].encode("mbcs") f.close()
D:\workspace\Python\3-11>python test.py ['\xef\xbb\xbf\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a'] Traceback (most recent call last): File "test.py", line 15, in ? print st2[0].encode("mbcs") UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128)
終了。
ちなみに2
上記の方法でカタカナ漢字も対応しておりました。