2016-12-06 120 views
2

我有一个变量:编码蟒蛇UTF-8分裂

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"] 

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

+0

可以描述更多细节,你正在从文件中读取? –

+0

是的,我正在从一个文件中读取数据,该文件包含在网站上爬取的数据 – mel

回答

2

使用unicode分裂unicode一样,

>>> 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'] 
>>> 
1

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

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

所以,你需要更换被u"\u2011"字符用一个简单的连字符(如果你能有任何人在你的数据)或只需简单地将字符串拆分为u"\u2011"(如果您确定将始终以获得此分隔符)。

+0

如果它是[非破折号](http://www.fileformat.info/info/unicode/char/2011/index.htm)它甚至可以被空字符串替换,但取决于上下文。 – Matthias