带有unicode的python 2.7 string.join()

时间:2013-02-07 18:50:27

标签: python unicode

我在python 2.7中有很多字节字符串(str,而不是unicode),包含unicode数据(utf-8编码)。

我正在尝试加入它们("".join(utf8_strings)u"".join(utf8_strings))抛出

UnicodeDecodeError: 'ascii' codec can't decode byte 0xec in position 0: ordinal not in range(128)`

有没有办法对非ascii字符串使用.join()方法?我确定我可以在for循环中连接它们,但这不符合成本效益。

2 个答案:

答案 0 :(得分:16)

使用''.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字符串分别添加到要加入的字符串列表时,会引发上述异常。

答案 1 :(得分:2)

如果每个参数都是"".join(...)(无论编码是什么),

str都会有效。

您看到的问题可能与加入无关,而是与您提供的数据有关。发布更多代码,以便我们可以看到真正的错误。