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(...)各パラメーターがstr(エンコーディングが何であれ) である場合に機能します。

表示されている問題は、おそらく結合に関連するものではなく、結合に提供するデータに関連しています。もっとコードを投稿して、実際に何が間違っているかを確認してください。

于 2013-02-07T18:54:30.537 に答える