13

我有一堆包含 unicode 数据(在编码中)的字节字符串(在 python 2.7 中str,不是)。unicodeutf-8

我正在尝试加入他们(通过"".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 字符串的方法?当然我可以在 for 循环中连接它们,但这并不划算。

4

2 回答 2

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)

u''当使用 Unicode 值作为连接符并分别将 Unicode 字符串添加到要连接的字符串列表时,会引发上述异常。

于 2013-02-07T18:54:00.227 回答
2

"".join(...)如果每个参数都是 a str(无论编码是什么),它将起作用。

您看到的问题可能与联接无关,而是与您提供给它的数据有关。发布更多代码,以便我们了解真正的问题所在。

于 2013-02-07T18:54:30.537 回答