python 2.7 string.join() 与 unicode
我有一堆字节字符串(在Python 2.7中是str
类型,不是unicode
类型),里面包含了用utf-8
编码的Unicode数据。
我想把它们连接起来(用"".join(utf8_strings)
或者u"".join(utf8_strings)
),但是出现了错误:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xec in position 0: ordinal not in range(128)`
有没有什么办法可以让.join()
方法处理非ASCII字符串?当然我可以用循环一个个拼接,但那样效率不高。
2 个回答
2
"".join(...)
这个写法是可以用的,只要你传入的每个参数都是 str
类型的(不管编码是什么)。
你遇到的问题可能不是因为 join 这个方法本身,而是因为你给它传入的数据有问题。请发更多代码过来,这样我们才能更清楚地看出哪里出错了。
17
用 ''.join()
来连接字节字符串是没问题的;你看到的错误只有在你把 unicode
和 str
这两种类型混在一起用的时候才会出现。
>>> utf8 = [u'\u0123'.encode('utf8'), u'\u0234'.encode('utf8')]
>>> ''.join(utf8)
'\xc4\xa3\xc8\xb4'
>>> u''.join(utf8)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 0: ordinal not in range(128)
>>> ''.join(utf8 + [u'unicode object'])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 0: ordinal not in range(128)
上面提到的异常错误是因为你用 Unicode 值 u''
来连接字符串时,以及把一个 Unicode 字符串加到要连接的字符串列表里时引起的。