在Python 2.7中将Unicode字符串转换为ASCII

时间:2017-09-26 14:19:47

标签: python python-2.7 unicode character-encoding ascii

我有一个有趣的问题。

我收到一个传递给变量的Unicode字符串,我想将其转换为普通的ASCII字符串。

我似乎无法弄清楚如何在Python2.7中执行此操作。

以下适用于Python3

rawdata = '\u003c!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"\u003e'
b = bytearray()
b.extend(map(ord, rawdata))
c = ''.join(chr(i) for i in b)

如果我打电话给print(c),我会得到一个漂亮,干净的输出:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

但是当我在Python2.7中调用它时,它仍在打印Unicode转义字符(实质上是再次打印rawdata变量)。

我做错了什么?我必须做一个简单的电话。

2 个答案:

答案 0 :(得分:1)

所以我在帖子发布后2分钟就找到了答案。

答案是在Python 2.7中执行以下操作

rawdata = '\u003c!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"\u003e'
asciistr = rawdata.decode("raw_unicode_escape")
print asciistr

答案 1 :(得分:0)

为了在两个版本上实现更好的可移植性,您应该使用Unidecode,这正是您想要的。

>>> from unidecode import unidecode
>>> unidecode(u'ko\u017eu\u0161\u010dek')
'kozuscek'
>>> unidecode(u'30 \U0001d5c4\U0001d5c6/\U0001d5c1')
'30 km/h'
>>> unidecode(u"\u5317\u4EB0")
'Bei Jing '