【问题标题】:Conversion of Unicode string to ASCII in python 2.7在 python 2.7 中将 Unicode 字符串转换为 ASCII
【发布时间】:2018-03-07 19:49:30
【问题描述】:

我有一个有趣的问题。

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

我做错了什么?一定有一个简单的电话,我没有打。

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 如何使用变量而不是硬创建的 unicode 字符串来执行此操作?这就是我的挣扎。
      猜你喜欢
      • 2017-03-30
      • 1970-01-01
      • 1970-01-01
      • 2011-12-26
      • 2018-03-21
      • 2014-01-13
      • 1970-01-01
      • 2010-12-09
      相关资源
      最近更新 更多