以下のようなデータベースから列の値を取得しています:
`;;][@+©
Pythonコードでこれを読んでいると、以下のエラーメッセージが表示されます。
UnicodeDecodeError:'utf8'コーデックは位置7のバイト0xa9をデコードできません:無効な開始バイト
次に、以下のコードを試しましたが、機能しませんでした。
unicode(' `;;][@+©', 'utf-8')
では、どうすればこの問題を解決できますか?
以下のようなデータベースから列の値を取得しています:
`;;][@+©
Pythonコードでこれを読んでいると、以下のエラーメッセージが表示されます。
UnicodeDecodeError:'utf8'コーデックは位置7のバイト0xa9をデコードできません:無効な開始バイト
次に、以下のコードを試しましたが、機能しませんでした。
unicode(' `;;][@+©', 'utf-8')
では、どうすればこの問題を解決できますか?
まず、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'