• 締切済み

Python2.6で日本語(UTF-8)が文字化けしてしまいます。

Python2.6で日本語(UTF-8)が文字化けしてしまいます。 非常に困ってます。よろしくお願いします。 使用OS Windows7 使用エディタ SciTE #coding: shift-jisだとエラーがでます。 標準入力、標準出力、標準エラー出力の文字コード cp932 コード # coding: utf-8 import random class Dice: def __init__(self,val=6): if val not in [4,6,8,12,20]: raise Exception('そんな正多面体はありません。') self.face_num = val def shoot(self): return random.randint(1,self.face_num) ------------------------------------------------------------ 実行 C:\Users\eric\pyworks>python Python 2.6.5 (r265:79096, Mar 19 2010, 21:48:26) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import dice >>> a =dice.Dice(9) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "dice.py", line 8, in __init__ raise Exception('縺昴s縺ェ豁」螟夐擇菴薙・縺ゅj縺セ縺帙s縲・) Exception: 縺昴s縺ェ豁」螟夐擇菴薙・縺ゅj縺セ縺帙s縲

みんなの回答

回答No.2

うん。そうですね。例えば、UTF-8ベースのUbuntu Linuxだと問題は生じてません。 # ここから In [1]: import dice In [2]: a = dice.Dice(9) --------------------------------------------------------------------------- Exception Traceback (most recent call last) /home/cametan/<ipython console> in <module>() /home/cametan/dice.pyc in __init__(self, val) 6 def __init__(self,val=6): 7 if val not in [4,6,8,12,20]: ----> 8 raise Exception('そんな正多面体はありません。') 9 self.face_num = val 10 Exception: そんな正多面体はありません。 In [3]: # ここまで って事は、#1氏の仰る通り、端末の出力指定をUTF-8に直すのが一番手っ取り早いだろう、と言う事です。 Windowsの場合、もしDOS窓使ってるんでしたら、DOS窓上で chcp 65001 と打てば文字コードをUTF-8に変更出来る模様です。

hackzero
質問者

補足

ご丁寧にありがとうございます。しかし、DOS窓上で chcp 65001 と打ってもうまくいきませんでした。 #ここから Active code page: 65001 C:\Users\eric\pyworks>python Python 2.6.5 (r265:79096, Mar 19 2010, 21:48:26) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import dice >>> a = dice.Dice(9) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "dice.py", line 7, in __init__ raise Exception('ã??ã?“ã?ªæ?£多é?¢ä?“ã?¯ã??ã?Šã??ã??ã?“ã??') Exception: ã??ã?“ã?ªæ?£多é?¢ä?“ã?¯ã??ã?Šã??ã??ã?“ã?? #ここまで

回答No.1

utf8で書かれた文字列がshift-jisに解釈されたように見えますね。 出力端末をutf8にするか、文字列出力をshift-jisに合わせればいいでしょう。 あと、一応unicode文字列は u'' とくくった方が良いのでは。

hackzero
質問者

補足

回答ありがとうございます。 >>あと、一応unicode文字列は u'' とくくった方が良いのでは。 これはこういう事ですよね。ソースコードで 前)raise Exception('そんな正多面体はありません。') 後)raise Exception(u'そんな正多面体はありません。') #ここから(chcp 65001と打った後です。) >>> a = dice.Dice(9) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "dice.py", line 7, in __init__ raise Exception(u'ã??ã?“ã?ªæ?£多é?¢ä?“ã?¯ã??ã?Šã??ã??ã?“ã??') Exception #ここまで 以上のようにExceptionが表示されなくなってしまいます。

関連するQ&A