繁体   English   中英

在不转换为ASCII的情况下无法拆分Unicode字符串-python 2.7

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM