2011-07-07 10 views
0

printステートメントでUnicodeDecodeErrorをデバッグするときに何が起こっているのかを理解するのに苦労しました。印刷機能がハングアップする原因は何ですか?安全に印刷するにはどうすればよいですか?

私は狂った理論で自分自身を混乱されたが、最終的には問題が特定の文字列を印刷するとハングアップするだけのことだった。

print '\xe6\x9c\xaa\xe5\x91\xbd\xe5\x90\x8d.jpg' 

それがハングアップする原因は何?

代わりにコンソールに印刷するにはどうすればよいですか? print repr(x)

+2

どのコンソールですか?どのようなOSですか?どのロケール? – detly

答えて

2

それはあなたが何コンソールを使用している

Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56) 
[GCC 4.4.3] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> print '\xe6\x9c\xaa\xe5\x91\xbd\xe5\x90\x8d.jpg' 
未命名.jpg 

私のためのLinux上で動作しますOK?おそらくそれはバグUTF8エンコードされた文字列のように見える

+0

ああ、とてもいいです!私のMacでは動作しますが、私の生産環境(Ubuntu Bash IPython)では動作しません。 –

+0

@Yuji、面白いです。 'sys.stdout.encoding'とは何ですか? –

+0

ANSI_X3.4-1968。ありがとう!私はそれを確認できるかどうかわからなかった。 MacはUTF8です。印刷がこのエンコーディングに変換されるはずですか?それは 'UnicodeDecodeError'を送出すべきでしょうか? 'str()'がどのように動作するかを調べると... pydocsは私のためにダウンしています。 –

0

があります

>>> '\xe6\x9c\xaa\xe5\x91\xbd\xe5\x90\x8d.jpg'.decode('utf8') 
u'\u672a\u547d\u540d.jpg' 

あなたのコンソールがASCIIのみを処理し、できない場合

(例えば)UTF8に方法はありませんので、それがクラッシュしていますその一連のバイトをASCII表現可能な文字列にデコードします。

>>> '\xe6\x9c\xaa\xe5\x91\xbd\xe5\x90\x8d.jpg'.decode('ascii') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 0: ordinal not in range(128) 

UTF-8をサポートするコンソールを使用する必要があります。

関連する問題