4

重複の可能性:
Windows コンソールに utf-8 を表示する方法

Python の「print」ステートメントが機能しません。

このエラーを回避するには、

'ascii' コーデックは位置 0 のバイト 0xec をデコードできません: 序数が範囲外です (128)

以下のように、コードにいくつかのステートメントを入れます

import sys

reload(sys)

sys.setdefaultencoding('utf-8')

コードの前に、「印刷」がうまく機能します。ただし、コードの後、「印刷」は機能しません。

print "A"

import sys

reload(sys)

sys.setdefaultencoding('utf-8')

print "B"

ここでは、「A」のみが私のコンピューター、Python2.7.3 (64bit) for Windows に出力されています。Python2.7 IDLE

私は助けが必要です

4

1 に答える 1

4

sys.setdefaultencoding何らかの理由で削除されており、復元にsiteは使用しないでください。reload(sys)代わりに、私の解決策は何もしないことです。Python は ENV LANG 変数または Windowschcpエンコーディングに基づいてエンコーディングを自動的に検出します。

$ python
Python 2.7.3 (default, Sep 26 2012, 21:51:14) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> import os
>>> sys.stdout.encoding
'UTF-8'
>>> os.environ["LANG"]
'pl_PL.UTF-8'
>>> print u"\xabtest\xbb"
«test»
>>>

ただし、エンコーディングに必要な文字がない場合、問題が発生する可能性があります。代わりに、グレースフルに劣化を試みる必要があります - 必要な文字が表示される可能性は 0 に近いです (したがって、純粋な ASCII バージョンを使用するか、Unidecode を使用して使用可能な出力を表示する (または単に失敗する) 必要があります)。例外をキャッチして、代わりに文字列の基本バージョンを出力してみてください。

$ LANG=C python
Python 2.7.3 (default, Sep 26 2012, 21:51:14) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> import os
>>> sys.stdout.encoding
'ANSI_X3.4-1968'
>>> os.environ["LANG"]
'C'
>>> print u"\xabtest\xbb"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xab' in position 0: ordinal not in range(128)
>>>

しかし、Unicode サポートに問題がある Windows と呼ばれる問題があります。技術的chcp 65001には動作するはずですが、Python 3.3 を使用していない限り、実際には動作しません。Python はポータブルstdio.hを使用しcmd.exeますが、WriteConsoleW(). 実際には、確実に動作するのは 8 ビットのエンコーディング (CP437 など) だけです。

回避策は、Cygwin のコンソールや Python に含まれる IDLE など、Unicode を適切にサポートする他の端末を使用することです。

于 2012-11-18T09:38:51.923 に答える