アプリ版:「スタンプのみでお礼する」機能のリリースについて

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縲

A 回答 (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に変更出来る模様です。

この回答への補足

ご丁寧にありがとうございます。しかし、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: ?????“?????£?????¢??“?????????????????“???
#ここまで

補足日時:2010/05/12 20:57
    • good
    • 0

utf8で書かれた文字列がshift-jisに解釈されたように見えますね。


出力端末をutf8にするか、文字列出力をshift-jisに合わせればいいでしょう。

あと、一応unicode文字列は u'' とくくった方が良いのでは。

この回答への補足

回答ありがとうございます。

>>あと、一応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が表示されなくなってしまいます。

補足日時:2010/05/12 21:07
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!