Python2.7和Python3.4编码和分割函数不工作

Python2.7和Python3.4编码和分割函数不工作,python,python-2.7,python-3.x,encoding,utf-8,Python,Python 2.7,Python 3.x,Encoding,Utf 8,我打赌这是个愚蠢的问题,我在这里 我在做Fedora 21 我从数据库中收到以下字符串: 1979年第16次会议–2001年第25次会议 我要用中间的'-'来分割字符串。 因此,我做了以下工作: text = '16 de enero de 1979 – 25 de agosto de 2001' Python 2.7.8: text # returns: '16 de enero de 1979 \xe2\x80\x93 25 de agosto de 2001' text.split('-

我打赌这是个愚蠢的问题,我在这里

我在做Fedora 21

我从数据库中收到以下字符串:
1979年第16次会议–2001年第25次会议
我要用中间的'-'来分割字符串。 因此,我做了以下工作:

text = '16 de enero de 1979 – 25 de agosto de 2001'
Python 2.7.8:

text
# returns: '16 de enero de 1979 \xe2\x80\x93 25 de agosto de 2001'
text.split('-')
# returns ['16 de enero de 1979 \xe2\x80\x93 25 de agosto de 2001']
Python 3.4

text
# returns: '16 de enero de 1979 – 25 de agosto de 2001'
text.split('-')
#returns: ['16 de enero de 1979 – 25 de agosto de 2001']
我知道Python3.x的默认编码是utf-8,Python2.x的默认编码是ascii。问题是,我从来没有完全理解,我们他妈的怎么能处理所有这些编码的事情。 当我将这些信息存储在数据库中时,我使用了
charset='utf-8'
来确保我不会遇到这种麻烦。要知道我正在检索信息,Python没有很好地处理编码。或我没有很好地处理Python(很可能)。
提前感谢。

错误在于您使用了错误的字符


原始字符串中的字符是长破折号“-”,而拆分参数中的字符是短破折号“-”。

它不是普通的连字符。它是一个unicode字符
\u2013
。我试过这样的方法:

In [70]: text.split('\u2013')
Out[70]: [u'16 de enero de 1979 \u2013 25 de agosto de 2001']

In [71]: text.split(u'-')
Out[71]: [u'16 de enero de 1979 \u2013 25 de agosto de 2001']

In [72]: text.split(u'–')       #HERE i copied the character from string
Out[72]: [u'16 de enero de 1979 ', u' 25 de agosto de 2001']
在您的情况下,它不工作,因为它找不到
-
(连字符)

  • 确保文本是Unicode字符串:在顶部添加
    from\uuuu future\uuuu导入Unicode\u文本
    ,或调用:
    text=utf8bytes.decode('utf-8')
  • 使用正确的分隔符
    u'\N{EN DASH}'
  • >>u'16 de enero de 1979–25 de agosto de 2001'.split(u'\N{EN DASH})
    [u'16 de enero de 1979',u'25 de agosto de 2001']