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

6 投票
3 回答
17350 浏览
提问于 2025-04-16 10:14

我有一段文本,里面包含像"\xaf"和"\xbe"这样的字符。根据我从这个问题了解到的,这些是ASCII编码的字符。

我想在Python中把它们转换成UTF-8格式的字符。通常使用string.encode("utf-8")会出现UnicodeDecodeError的错误。有没有更好的方法,比如使用codecs这个标准库?

这里有一个200个字符的示例

3 个回答

2

这不是ASCII码(ASCII码的范围只到127,而\xaf是175)。你首先需要找出正确的编码方式,把它解码,然后再用UTF-8重新编码。

你能提供一个实际的字符串样本吗?这样我们可能就能猜出现在用的是什么编码。

3

.encode 是用来把一个Unicode字符串(在Python 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'
3

你的文件已经是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))

还有就是手动填写一些未知的名字:
字符 U000a 换行符
字符 U001e 信息分隔符二
字符 U001f 信息分隔符一

撰写回答