Hatena::Groupfukuoka-py

tshpaper.py

2012-01-06

pythonの文字コードではまったとき

11:28

新年明けましておめでとうございます。

今年も、宜しくお願い致します。

以前、pythonエクセルを操作するという記事を書いたのですが、

それの続きで、python文字コードではまったので、備忘録。

はまったのは、エクセルからデータを抜いてきたときに、

文字コードというか型というかそれらが、バラバラになっているときに、

ファイルに書きだすとエラーになってしまう。

具体的には、

print type(val6)

の結果にint,str,unicodeの3種類がありました。

※val6はエクセルから取得したデータ(文字列

エラー的には以下のとおり

1. おそらく、unicodeをファイルに書きだす時にエラーになったのではないかと

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 0: ordinal not in range(128)

2. val6.encode('utf_8')したときにintが含まれていたのでエラーになった

TypeError: coercing to Unicode: need string or buffer, int found

いろいろとやり方考えたのですが、

以下の方法で対応しました。

1. intをstrに変更する

val6str = str(val6) if type(val6) is int else val6

2. strをencode('utf_8')する

val6str.encode('utf_8')

とりあえず、これで正常に出力できるようになりました。


文字コード関連で調べていたら、いろいろと方法があるみたいですが、

今回の件に関しては、すべて同様のエラーになりました。

まだまだ勉強不足だなと感じました。

## sys.stdoutをラップする
import codecs
f = open('test.txt','a')
f = codecs.lookup('utf_8')[-1](f)
f.write(out)
f.close()

参考URL:http://lab.hde.co.jp/2008/08/pythonunicodeencodeerror.html

AtiaAtia2012/02/21 01:28That raelly captures the spirit of it. Thanks for posting.

avxvhdgyuwavxvhdgyuw2012/02/21 19:11t1OtgG <a href="http://dgjcspmllqsx.com/">dgjcspmllqsx</a>

avxvhdgyuwavxvhdgyuw2012/02/21 19:11t1OtgG <a href="http://dgjcspmllqsx.com/">dgjcspmllqsx</a>

ltpzygixlsltpzygixls2012/02/22 00:10QXO0Da , [url=http://cosfzbeyaezq.com/]cosfzbeyaezq[/url], [link=http://tblfvytkjgnx.com/]tblfvytkjgnx[/link], http://rsnfgrifjxyx.com/

lviplclviplc2012/02/29 01:52vR8uMy <a href="http://xnsvougdigft.com/">xnsvougdigft</a>