python 2.7 string.join() 与 unicode

13 投票
2 回答
26717 浏览
提问于 2025-04-17 15:08

我有一堆字节字符串(在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() 来连接字节字符串是没问题的;你看到的错误只有在你把 unicodestr 这两种类型混在一起用的时候才会出现。

>>> 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 字符串加到要连接的字符串列表里时引起的。

撰写回答