0

現在 Sublime 2 を使用しており、そこで Python コードを実行しています。このコードを実行しようとすると。次のエラーが表示されます。

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

# -*- coding: utf-8 -*-  
s = unicode('abcdefö') 
print s

私はユニコードに関するPythonのドキュメントを読んでいますが、私が理解している限り、これは機能するはずですか、それとも機能していないのはコンソールですか

編集: s = u'abcdefö' を文字列として使用すると、ほぼ同じ結果が得られます。私が得る結果は

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

4

3 に答える 3

6

実行時unicode('abcdefö')にエンコードされた文字列をユニコードにデコードしようとします。この行は、ソース ファイルが utf8 でエンコードされていることを Python に伝えるだけです。スクリプトが実行されると、スクリプトはコンパイルされ、文字列はエンコードされた文字列として保存されます。そのため、Python が文字列をデコードしようとすると、デフォルトで ascii が使用されます。文字列は実際には utf8 でエンコードされているため、これは失敗します。coding: utf-8

s = u'abcdefö'ファイルに対して宣言されたエンコーディングで文字列をデコードし、それをユニコードとして保存するようにコンパイラに指示することができます。s = unicode('abcdefö', 'utf8')またはs = 'abcdefö'.decode('utf8')、実行時に同じことを行います。

ただし、今すぐできるとは限りませんprint s。最初に、標準出力 (コンソール/エディター/IDE) が実際に表示できる文字セットで、内部の Unicode 文字列をエンコードする必要があります。悲しいことに、Python は適切な文字セットを見つけ出すのに失敗し、デフォルトで ascii に戻り、文字列に非 ASCII 文字が含まれているとエラーが発生することがよくあります。Python Wikiには、 stdout を適切に設定する方法がいくつかあります。

于 2012-12-08T15:34:41.987 に答える
1

文字列を Unicode 文字列としてマークする必要があります。

s = u'abcdefö'
于 2012-12-08T15:05:57.410 に答える