繁体   English   中英

python 2.7中Unicode字符串到ASCII的转换

[英]Conversion of Unicode string to ASCII in python 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变量)。

我究竟做错了什么? 必须有一个我没有拨打的简单电话。

所以我在发布这篇文章后 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

为了在两个版本上获得更好的可移植性,您应该使用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 '

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM