忍者ブログ
Yaleで、遊んで学ぶ日々。

Yaleで、遊んで学ぶ日々。

囲碁、ときどきプログラミング、ところにより経済。
[187]  [186]  [185]  [184]  [183]  [182]  [181]  [180]  [179]  [178]  [177
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

Pythonを使って、テキストをコンソール上に表示したり、ファイルに書き込んだりしていると、特に日本語を使っている時には、エンコードに起因するエラーが生じることがある。

'ascii' codec can't encode characters in position ...

というようなエラーメッセージだ。



深い部分はよく分からないが、対処方法は比較的シンプルだ。


 * Unicode に変換

日本語のテキストファイルは、文字コードに S-JIS が使われていることが多い。これは、Windowsのデフォルトだからだと思うが、Pythonで扱う場合はUnicodeであった方が紛れが少ない。そこで、まずはUnicodeにしてしまおう。

x = unicode(x, "sjis", "ignore")

"sjis"  の部分を "utf-8" とかにすれば、他の文字コードのテキストにも使える。"ignore" という引数は、確かちょっと変換が上手く行かないを無視するという意味合いだったと思うが、テキストの一部分に非常に珍しい文字が使われていたりすることによるエラーを避けることができる。


* 表示したり書き込んだりするときは、encode() 関数を噛ませるといい。

print x

with open("tmp.txt", 'w') as f:
    f.write(x)


としたときに上記のようなエラーが出る場合、encode() 関数を使って変換してやると上手くいくようだ。

print x.encode('utf-8')

with open("tmp.txt", 'w') as f:
    f.write(x.encode('utf-8'))


こうするとUnicode文字列がUTF8に変換される。僕の環境ではUTF8がいいようだが、変換するコードは自分の環境に合わせて選ぶ。
PR
この記事にコメントする
お名前:
タイトル:
文字色:
メールアドレス:
URL:
コメント:
パスワード:   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事へのトラックバック
この記事にトラックバックする:
Calender
10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Search in This Blog
Latest Comments
[03/30 川内のばば山田]
[03/30 川内のばば山田]
[08/06 Aterarie]
[07/05 Agazoger]
[07/01 Thomaskina]
Oldest Posts
Latest Trackbacks
フリーエリア

Barcode
Access Analysis
Powerd by NINJAブログ / Designed by SUSH
Copyright © Yaleで、遊んで学ぶ日々。 All Rights Reserved.
忍者ブログ [PR]