6

私にとってはUnicodeの奇妙なエラー。私はUnicodeをうまく扱っていましたが、今朝それを実行したとき、1つのアイテムu'\ u201d'がエラーを出し、私に

UnicodeError: ASCII encoding error: ordinal not in range(128)

コードと明らかにそのutf-32を調べましたが、インタープリターでデコードしようとすると、次のようになります。

c = u'\u201d'
c.decode('utf-32', 'replace')

または、それを使用した他の操作では、コーデックでそれを認識しませんが、それでも「RIGHTDOUBLEQUOTATIONMARK」として検出されました

私は得る:

Traceback (most recent call last):
File "<pyshell#154>", line 1, in <module>
    c.decode('utf-32')
  File "C:\Python27\lib\encodings\utf_32.py", line 11, in decode
    return codecs.utf_32_decode(input, errors, True)
UnicodeEncodeError: 'ascii' codec can't encode character u'\u201d' in position 0: ordinal not in range(128)
4

1 に答える 1

9

あなたはすでにユニコード文字列を持っています、それを再びユニコード文字列にデコードする必要はありません。

その場合に起こることは、Pythonが最初にそれをエンコードしようとするので、次にそれをからデコードできるということですutf-32。これを行うには、デフォルトのエンコーディングを使用します。これはたまたまASCIIです。その場合に発生した例外を示す明示的なエンコードを次に示します。

>>> u'\u201d'.encode('ASCII')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\u201d' in position 0: ordinal not in range(128)

つまり、のようなUnicodeリテラルがある場合u''、それをデコードする必要はありません。

Python Unicode HOWTOのユニコード、エンコーディング、およびデフォルト設定を確認してください。このテーマに関するもう1つの貴重な記事は、JoelSpolskyのMinimunUnicodeナレッジポストです。

于 2012-09-22T16:58:35.823 に答える