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

问题描述:

我有一个有趣的问题。将Unicode字符串转换为Python中的ASCII 2.7

我得到一个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变量)。

我在做什么错?有一个简单的电话,我不是在做。

以下为更好的便携性在两个版本中,你应该使用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 ' 
+0

你如何做到这一点与变量,而不是一个硬创建的Unicode字符串?那是我与这个的斗争。 – jasonmclose

所以我在发帖之后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