-2

以下のようなデータベースから列の値を取得しています:

`;;][@+©

Pythonコードでこれを読んでいると、以下のエラーメッセージが表示されます。

UnicodeDecodeError:'utf8'コーデックは位置7のバイト0xa9をデコードできません:無効な開始バイト

次に、以下のコードを試しましたが、機能しませんでした。

unicode(' `;;][@+©', 'utf-8')

では、どうすればこの問題を解決できますか?

4

1 に答える 1

3

まず、Unicodeに関するこの記事を読んでください。あなたが持っている文字列はいくつかのエンコーディングでエンコードされていますが、 UTF8ではエンコードされていません。UTF8ではないと判断できる理由は、7番目のバイト0xa9(= 169)が0-127(ASCII)の範囲にないが、先頭にバイトがないためです。

したがって、秘訣はそれがどのエンコーディングであるかを理解することです。ヒントがあります。エンコーディングでは、バイト0xa9をグリフ©として表す必要があります。非常に一般的であるため、 Windows-1252またはLatin-1エンコーディングのいずれかであると思います。グリッドでA9を検索すると(文字エンコーディングは基本的に戦艦をプレイするのと同じです)、両方に著作権記号が表示されます。

>>> unicode(' `;;][@+©')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 8: ordinal not in range(128)
>>> unicode(' `;;][@+©', 'latin-1')
u' `;;][@+\xc2\xa9'
>>> unicode(' `;;][@+©', 'cp1252')
u' `;;][@+\xc2\xa9'
于 2013-03-20T08:54:14.577 に答える