5

"\ xaf"、 "\ xbe"などの文字を含むテキストがあります。これは、this questionからわかるように、ASCIIでエンコードされた文字です。 xXYでエンコードされた文字をPythonでUTF-8に変換するには?

PythonでそれらをUTF-8に変換したいと考えています。通常string.encode("utf-8")UnicodeDecodeErrorを投げる。たとえば、codecs標準ライブラリのほうが良い方法がありますか?

サンプル200 characters here

+0

あなたのサンプルでは、​​任意の '\のxaf'が含まれていませんかそのような。あなたはそのような文字を持つサンプルを持っていますか? – dkarp

+0

サンプルデータ*は*有効なUTF-8です。 "レコードセパレータ"と "ユニットセパレータ"の制御文字。 – dan04

+0

'enca'(http://linux.die.net/man/1/enca)によると、UTF-8は"非テキストデータに囲まれた/混在しています "。 –

答えて

2

あなたのファイルはすでにUTF-8エンコードファイルです。

未知の名前を記入
# saved encoding-sample to /tmp/encoding-sample 
import codecs 
fp= codecs.open("/tmp/encoding-sample", "r", "utf8") 
data= fp.read() 

import unicodedata as ud 

chars= sorted(set(data)) 
for char in chars: 
    try: 
     charname= ud.name(char) 
    except ValueError: 
     charname= "<unknown>" 
    sys.stdout.write("char U%04x %s\n" % (ord(char), charname)) 

し、手動:
char型のU000a改行
文字U001e INFORMATION SEPARATOR TWO
文字U001f INFORMATION SEPARATOR ONE

+0

ありがとうございます、私が提供した短いサンプルはUTF-8です。しかし、(不運にも)ファイル全体には、他のさまざまなエンコーディング(主にwindows-1250)でエンコードされた部分があります。私は '' string ''を試して解決しました。最も一般的なエンコーディングの場合は 'decode()'を、失敗した場合は 'chardet'ライブラリを使ってエンコーディングを推測します。 –

2

これはASCIIコードではありません(ASCIIコードは127になります; \xafは175です)。最初に正しいエンコーディングを見つけ出し、デコードしてからUTF-8で再エンコードする必要があります。

実際の文字列サンプルを提供できますか?次に、現在のエンコーディングを推測することができます。

+0

短いサンプルへのリンクを追加する質問を編集しました。 –

+0

そのサンプルは私にはエンコードされたテキストのようには見えません。 –

+0

MARC形式(http://www.loc.gov/marc/)でなければなりません。 'enca'でエンコーディングを検出しようとしたとき、私は、ほとんどがUTF-8で非テキスト文字が散在しているという応答を得ました。 –

3

.encodeは、バイト列(2.xでstr、3.xではbytes)にUnicode文字列(2.xでunicode、3.xではstr)を変換するためのものです。

2.xでは、strオブジェクトで.encodeを呼び出すことは正当です。 Pythonは暗黙的に文字列をUnicodeに最初にデコードします:s.encode(e)は、s.decode(sys.getdefaultencoding()).encode(e)のように動作します。

問題は、デフォルトのエンコーディングが "ascii"で、文字列に非ASCII文字が含まれていることです。これは、明示的に正しいエンコーディングを指定することで解決できます。

>>> '\xAF \xBE'.decode('ISO-8859-1').encode('UTF-8') 
'\xc2\xaf \xc2\xbe' 
+0

それは問題ありませんが、残りのテキストはUTF-8としてエンコードされています(少なくともこれは 'encaによって報告されました)。したがって、この手順はテキスト全体に適用することはできません。 –

+2

\ xXY文字はISO-8859-1にありますか? –

関連する問題