将Unicode字符串转换为字节字符串

11

我从一个函数中得到了一个字符串,它的表示形式是u'\xd0\xbc\xd0\xb0\xd1\x80\xd0\xba\xd0\xb0',但为了处理它,我需要将它转换为字节串(像'\xd0\xbc\xd0\xb0\xd1\x80\xd0\xba\xd0\xb0')。

如何在不改变字符串的情况下进行转换?

到目前为止,我最好的猜测是使用 s.encode('unicode_escape'),这将返回'\\xd0\\xbc\\xd0\\xb0\\xd1\\x80\\xd0\\xba\\xd0\\xb0',然后对每5个字符进行处理,使'\xd0'变成用'\xd0'表示的一个字符。

1个回答

23

ISO 8859-1(也称为Latin-1)将最初的256个Unicode代码点映射到它们的字节值。

>>> u'\xd0\xbc\xd0\xb0\xd1\x80\xd0\xba\xd0\xb0'.encode('latin-1')
'\xd0\xbc\xd0\xb0\xd1\x80\xd0\xba\xd0\xb0'

1
很聪明。我的第一选择是 bytes(map(ord, x)),但它可能会慢得多... - JBernardo
确认这会产生所需的结果。 - bryce
@JBernardo 这只适用于Python 3;从文本中无法确定,但很可能OP正在使用Python 2。 - zwol
@Zack 或许你可以使用 str(bytearray(...)) 代替 bytes。甚至更糟的是:''.join(map(chr, ...)) - JBernardo
抛出 '序号超出范围' - Nathan B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接