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

时间:2011-01-19 14:18:25

标签: python unicode utf-8 character-encoding non-ascii-characters

我的文字包含“\ xaf”,“\ xbe”等字符,正如我从this question所理解的那样,是ASCII编码字符。

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

示例200 characters here

3 个答案:

答案 0 :(得分:3)

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

在2.x中,在.encode对象上调用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'

答案 1 :(得分:2)

它不是ASCII(ASCII码最多只能达到127; \xaf是175)。首先需要找出正确的编码,解码,然后在UTF-8中重新编码。

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

答案 2 :(得分: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信息分离器TWO char U001f INFORMATION SEPARATOR ONE