2014年4月30日水曜日

defaultencodingの設定で嵌った件

pythonで一番ネックなのはもちろん日本語文字コード。
今回も文字コードで嵌りました。
if(InputSentencelist[1].find('こんにちは') != -1):
だと通るのに、
f = codecs.open('config.txt', 'r', 'utf8', 'ignore')
i = f.readline()
input.append(i)
if(InputSentencelist[1].find(input[q]) != -1)
だと
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 107: ordinal not in range(128)
でましたよ・・・UnicodeDecodeErrorです。
調べてみると、defaultencodingの設定をutf8にすると解決する模様。
defaultencodingの設定はシェルスクリプトで以下で確認可能。
>>> importsys
>>> sys.getdefaultencoding()
'ascii'
先に解決方法を述べとくと、(当方環境はMac OSX 10.7.5 Python2.7.1です)
/usr/lib/python2.6/site.pyの
<code>encoding = "ascii" # Default value set by _PyUnicode_Init()</code>
をコメントアウトして
<code>encoding = "utf-8" # Default value set by _PyUnicode_Init()</code>
を追記すればおk。
参考にしたのは以下のサイト
http://tatsushim.blogspot.jp/2011/09/python-unicodedecodeerror-ascii-codec.html  
 
 
 
 *追記*
他のサイトでは以下のようにsitecustomize.pyを作成して、
importsys
sys.setdefaultencoding('utf-8')
 
local/Library/Python/2.7/site-packages もしくは
usr/lib/python2.7/site-packagesの直下に置くとdefaultencodingが変更できる
とかいてあるのですが、置いても変更されなかった。
詳しくは以下のサイト
http://d.hatena.ne.jp/omiyan/20110105/p1
http://laugh-labo.blogspot.jp/2012/02/sitecustomizepy.html
http://cloverrose.hateblo.jp/entry/2012/05/10/015617

0 件のコメント:

コメントを投稿