【问题标题】:Encoding python utf-8 splitting编码 python utf-8 拆分
【发布时间】:2016-12-06 12:49:18
【问题描述】:

我有一个变量:

age_expectations = dictionary['looking_for']['age']
print type(age_expectations), age_expectations

输出是:

<type 'unicode'> 22‑35

当我试图用破折号拆分它时,我遇到了以下问题:

res = age_expectations.split('-')
print res

输出如下:

[u'22\u201135']

代替:

["22", "35"]

有什么问题?我已经尝试了许多编码和解码,但不确定它是如何工作的。问题是否来自分裂?

【问题讨论】:

  • 可以描述更多细节,你是从文件中读取?
  • 是的,我正在读取一个文件,其中包含在网站上抓取的数据

标签: python python-2.7 encoding split


【解决方案1】:

使用unicode拆分unicodelike,

>>> u_code = u'\u0032\u0032\u2011\u0033\u0035'
>>> print u_code
22‑35
>>> u_code.split('-')
[u'22\u201135']
>>> u_code.split(u'\u2011')
[u'22', u'35']
>>>

【讨论】:

    【解决方案2】:

    从代码中可以看出,age_expectations 变量中的连字符是 unicode U+2011 字符,而不是标准的“-”连字符。如果你打印了变量的表示,你会从一开始就看到它:

    >>> uu = u"22\u201135"
    >>> print uu
    22‑35
    >>> print repr(uu)
    u'22\u201135'
    >>> 
    

    因此,您需要将u"\u2011" 字符替换为一个简单的连字符(如果您的数据中可以包含其中任何一个),或者只需将字符串拆分为u"\u2011"(如果您确定将总是将此作为分隔符)。

    【讨论】:

    • 如果是non-breaking hyphen,它甚至可能被替换为空字符串,但这取决于上下文。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    • 1970-01-01
    • 2019-09-15
    • 2011-11-18
    相关资源
    最近更新 更多