8

重複の可能性:
Python UnicodeDecodeError - エンコードを誤解していますか?

次のように、Python でいくつかの Unicode シンボルを印刷するのに問題があります。

# encoding: utf-8
print u'ęėįųšįšū'

Python 2.7 を使用して VPS Ubuntu 12 サーバーでこれを実行しようとすると、エラーが発生します。

UnicodeEncodeError: 'ascii' コーデックは位置 0-7 の文字をエンコードできません: 序数が範囲外です (128)

それらを ASCII でエンコードしようとするのはなぜですか?

コマンドはローカル マシンで正しく実行されます。

ファイルは utf-8 で正しくエンコードされています。

4

1 に答える 1

10

オブジェクトを印刷unicodeするには、Python が出力エンコーディングを推測し、Unicode コードポイントをそのエンコーディングにエンコードする必要があります。

VPS サーバーでは、出力エンコーディングは ASCII のように見えます。これは、エンコーディングが検出されなかった場合 (パイプを使用する場合など) のデフォルトです。端末で同じコードを実行すると、通常は端末のエンコードが検出され、エンコードは成功します。

解決策は、スクリプトの要件に応じて明示的にエンコードすることです。

Python Unicode HOWTOを読んで、 Pythonがこの検出を行う方法と、なぜエンコードが必要なのかを理解してください。

于 2013-01-22T10:55:52.507 に答える