Pythonインタラクティブシェルで次のコードを試しています:
>> unicode("�'ам интересна информация")
次のエラーが表示されます。
'ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128)
情報を失うことなく、この文字列を Unicode に適切に変換するにはどうすればよいですか?
文字列の前にu
:
u"�'ам интересна информация"
あなたが持っているのは、バイナリデータの集まりです (つまり、バイト「文字列」)。いずれにせよ、正しく読み取るにはエンコーディングを知っている必要があります。
私はおそらくそれがUTF-8であると思います..グーグル翻訳は、一般的にエンコードされているブルガリア語を言います('iso_8859_5')
が、試してみると恐ろしい混乱を引き起こします。
私がやっていることは、バイト文字列を次のような通常の (非ユニコード) 文字列に入れることです:
s = "�'ам интересна информация"
最初の文字のバイト値は次のとおりです。
>>> s[0]
'\xef'
>>> ord(s[0])
239
次に、それをさまざまなコーディングスキームにデコードしようとします:
>>> from encodings import aliases
>>> print(aliases.aliases.keys())
>>> print s.decode('latin4')
īŋŊ'аĐŧ иĐŊŅĐĩŅĐĩŅĐŊа иĐŊŅĐžŅĐŧаŅиŅ
>>> print s.decode('iso_8859_5')
яПН'аАаМ аИаНбаЕбаЕбаНаА аИаНбаОбаМаАбаИб
>>> print s.decode('utf_16')
뿯➽냐볐퀠킸톽킂통킀통킁킽₰룐뷐蓑뻐胑볐냐蛑룐近
>>> print s.decode('utf_8')
�'ам интересна информация
したがって、あなたの答えとして私が思いつくことができる最高のものは次のとおりです。
情報を失うことなく、この文字列を Unicode に適切に変換するにはどうすればよいですか?
>>> uniVersion = "�'ам интересна информация".decode('utf-8')
>>> print uniVersion
�'ам интересна информация
@Joeyが言ったように、あなたが持っているのは単なるバイト文字列です.それがすでにどのエンコーディングにあるのかを知らずに実際にユニコードに変換することはできません.
データがASCII 7ビットエンコーディングであるとデフォルトで仮定するため、あなたが試みていたコードは機能しません。少し調整できます:
>>> uniVersion = unicode("�'ам интересна информация", 'utf-8')
Unicode 関数に伝えているだけで、これらのバイトは utf-8 形式でエンコードされています。
「�」記号は、フォントにその文字の表現がない場合に使用されます。
バイトストリームの一部であると実際には想定されていないか、ある時点で破損したか、または欠落しているバイトの前にさらに意味があると思われるバイトがいくつかあると思います。
コメントで不明な点があればお気軽にお尋ねください。