[英]Cannot split a unicode string without converting to ascii - python 2.7
我想分割I have £300
的字符串,但似乎split函数先将其转换为ascii,然后转换为。 但是我无法像以前一样将其转换回unicode。
还有没有其他方法可以拆分此类unicode字符串,而无需像片段摘录中所示那样对其进行破坏。
# -*- coding: utf-8 -*-
mystring = 'I have £300.'
alist = mystring.split()
alist = [item.decode("utf-8") for item in alist]
print "alist",alist
print "mystring.split()",mystring.split()
#I want to get [I,have,£300]
#I get: ['I', 'have', '\xc2\xa3300.']
您正在查看python 2 显示数据方式的局限性。
使用python 2:
>>> mystring = 'I have £300.'
>>> mystring.split()
['I', 'have', '\xc2\xa3300.']
但是,请注意它将根据需要进行打印:
>>> print(mystring.split()[2])
£300.
相比之下,使用python 3,它显示为您想要的:
>>> mystring = 'I have £300.'
>>> mystring.split()
['I', 'have', '£300.']
使用python 3的主要原因是其对unicode的出色处理。
问题不在于split()
。 真正的问题是python 2中的unicode处理令人困惑。
您代码的第一行产生一个字符串,即字节序列,其中包含符号£
的utf-8编码。 您可以通过显示原始字符串的repr
来确认这一点:
>>> mystring
'I have \xc2\xa3300.'
其余的语句正是按照您期望的那样进行输入的。 如果要使用unicode,请创建一个以以下内容开头的unicode字符串:
>>> mystring = u'I have £300.'
但是,一个更好的解决方案是切换到Python3。如果有这样一个更好的选择,那么用Python 2中的unicode语义来解决问题就不值得了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.