如何使用utf8编码拆分?

时间:2011-09-13 13:07:12

标签: python

我使用内置拆分功能,我有一个问题:

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

4 个答案:

答案 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