如何在Python中将\xXY编码字符转换为UTF-8?

2024-06-16 14:40:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含诸如“\xaf”、“\xbe”等字符的文本,据我从this question中了解,这些字符是ASCII编码的字符。

我想用Python把它们转换成UTF-8的等价物。通常的string.encode("utf-8")抛出UnicodeDecodeError。有没有更好的方法,例如使用codecs标准库?

样品200 characters here


Tags: 方法文本编码stringasciithis字符utf
3条回答

它不是ASCII码(ASCII码只上升到127;\xaf是175)。你首先需要找出正确的编码,解码,然后用UTF-8重新编码。

你能提供一个实际的字符串样本吗?然后我们就可以猜出当前的编码。

您的文件已经是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信息分隔符2
字符U001f信息分隔符一

.encode用于将Unicode字符串(2.x中的unicode,3.x中的str)转换为字节字符串(2.x中的str,3.x中的bytes)。

在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'

相关问题 更多 >