我在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循环中连接它们,但这不符合成本效益。
答案 0 :(得分:16)
使用''.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字符串分别添加到要加入的字符串列表时,会引发上述异常。
答案 1 :(得分:2)
"".join(...)
(无论编码是什么), str
都会有效。
您看到的问题可能与加入无关,而是与您提供的数据有关。发布更多代码,以便我们可以看到真正的错误。