3

Unicode アイテムを表示できませんu'\u201d'。他のユニコード項目では問題ありませんでした。私は UTF-8 を使用しましたが、この文字が現れて私のコードに地獄の雨を降らせました。インタープリターでさまざまなことを試しました。しかし、基本的にどこで:

c = u'\u201d'

次のエラーが表示されます。

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)

出力を確認してプレーンテキストとして保存できるように、GUI に表示する必要があります。 python でユニコード文字列を変換 すると少し説明されますが、まだ何かが明らかに欠けています。

4

2 に答える 2

7

.decode()この例外が発生した場合は、Unicode文字列を呼び出そうとしています。.decode()バイト文字列のみを呼び出し.encode()、Unicode文字列のみを呼び出す必要があります。それ以外の場合、インタープリターは最初にデフォルトのコーデック(通常は「ascii」)を使用して文字列を暗黙的にエンコードまたはデコードします。これは悪いニュースです。

一般的に、 http://farmdev.com/talks/unicode/を注意深く読むことをお勧めします...

于 2012-09-22T18:56:12.280 に答える
2

The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)を読んだことがあるなら、プレーンテキストのようなものは存在しないことを知っているでしょう..

しかし、あなたが求めていると主張するものと人々が説明しようとしているものとの間で意見が一致していないように見えるので、「その記号をプレーンテキストに変換する」とは、次のようなことを意味するのではないかと思い始めています。 「Unicode RIGHT DOUBLE QUOTATION MARK (U+201D) を QUOTATION MARK (U+0022) に置き換えてから、ASCII としてエンコードします」。たとえば、次のようなものです。

In [45]: s = u"“curly quoted”"

In [46]: s
Out[46]: u'\u201ccurly quoted\u201d'

In [47]: print s
“curly quoted”

次に、手動で置換を行います (「Unicode 文字列サニタイズ」を検索すると、さまざまな文字の「ダウングレード」を含む、はるかに優れたレシピが見つかります):

In [51]: fixer = dict.fromkeys([0x201c, 0x201d], u'"')

In [52]: s.translate(fixer)
Out[52]: u'"curly quoted"'

In [53]: s.translate(fixer).encode("ascii", "replace")
Out[53]: '"curly quoted"' 

「置換」は、修正しなかったものから保護します。

于 2012-09-22T19:22:49.687 に答える