5

「\xaf」、「\xbe」などの文字を含むテキストがあります。これは、この質問から理解できるように、ASCII エンコードされた文字です。

Python でそれらを UTF-8 に相当するものに変換したいと考えています。いつものstring.encode("utf-8")スローUnicodeDecodeError。たとえば、codecs標準ライブラリを使用するなど、より良い方法はありますか?

200 文字のサンプルはこちら.

4

3 に答える 3

3

.encodeUnicode 文字列 ( unicode2.x、str3.x) をバイト文字列 ( str2.x、 3.x) に変換するためのものbytesです。

.encode2.x では、strオブジェクトを呼び出すことは合法です。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'
于 2011-01-19T14:36:13.063 に答える
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 LINE FEED
char U001e INFORMATION SEPARATOR TWO
char U001f INFORMATION SEPARATOR ONE

于 2011-02-13T14:28:27.870 に答える
2

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

実際の文字列サンプルを提供していただけますか? 次に、おそらく現在のエンコーディングを推測できます。

于 2011-01-19T14:22:31.780 に答える