我使用内置拆分功能,我有一个问题:
>>> data = "test, ąśżźć, test2"
>>> splitted_data = data.split(",")
>>> print splitted_data
['test', ' \xc4\x85\xc5\x9b\xc5\xbc\xc5\xba\xc4\x87', ' test2']
为什么会这样?我应该怎么做才能防止这种情况发生?
Python 2.7.1
答案 0 :(得分:6)
这纯粹是从str.__repr__
获得的输出(在字符串上调用repr()
)。 \xc4
等只是它存储的实际方式。打印时它仍然是相同的:
>>> data = "test, ąśżźć, test2"
>>> data
'test, \xc4\x85\xc5\x9b\xc5\xbc\xc5\xba\xc4\x87, test2'
>>> print data
test, ąśżźć, test2
list.__str__
和list.__repr__
使用字符串的表示形式,但如果您访问其中的项目,它仍然是正确的:
>>> splitted_data = data.split(",")
>>> splitted_data
['test', ' \xc4\x85\xc5\x9b\xc5\xbc\xc5\xba\xc4\x87', ' test2']
>>> print splitted_data[1]
ąśżźć
答案 1 :(得分:1)
虽然您的代码段有效(转义只是repr
的工作原理),但您不应将字节串作为文本处理。首先解码,稍后再操作。
data = u"test, ąśżźć, test2" # or "test, ąśżźć, test2".decode('utf-8')
split_data = data.split(u",")
答案 2 :(得分:0)
您正在查看splitted_data
data = "test, åäö, test2"
data
'test, \xe5\xe4\xf6, test2'
data.split()[1]
'\xe5\xe4\xf6,'
print data.split()[1]
åäö,
答案 3 :(得分:0)
正如其他人所说,你的手术没有任何问题。您的期望未得到满足,因为Python选择的打印列表的显示不是包含字符串的列表。与以下内容比较:
>>> data = "test, ąśżźć, test2"
>>> a,b,c = data.split(",")
>>> print a,b,c
test ąśżźć test2