如何使用utf8编码进行分割?

2024-06-28 19:05:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用内置的拆分功能,但遇到了一个问题:

>>> data = "test, ąśżźć, test2"
>>> splitted_data = data.split(",")
>>> print splitted_data
['test', ' \xc4\x85\xc5\x9b\xc5\xbc\xc5\xba\xc4\x87', ' test2']

为什么会这样?我该怎么做才能防止这种情况发生?

Python2.7.1


Tags: test功能data内置splitprinttest2xc4
3条回答

您正在查看splitted_data的内部表示

data = "test, åäö, test2"
data
'test, \xe5\xe4\xf6, test2'

data.split()[1]
'\xe5\xe4\xf6,'

print data.split()[1]
åäö,

这纯粹是从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]
 ąśżźć

虽然您的代码片段可以工作(转义只是repr的工作方式),但不应该将bytestrings视为文本。先解码,后操作。

data       = u"test, ąśżźć, test2" # or "test, ąśżźć, test2".decode('utf-8')
split_data = data.split(u",")

相关问题 更多 >