2012-05-15 5 views
2

Я хочу, чтобы соединить две строки, как это:Python конкатенация строки - UnicodeDecodeError: «ASCII» кодек не может декодировать байт

requestData = command + ' ' + data 

«данные» в моем случае имеет двоичные данные, которые не должны быть открыты - он должен просто приклеить его к команде. Но имхо питон пытается открыть его, и он терпит неудачу с:

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

Есть ли способ, чтобы приклеить его без открытия?

Редактировать: Python 2.7 Также мои данные действительны, но декодирование utf-8 может не помочь - его двоичные данные.

+0

Какая версия Python это? Должно быть 2.что-то, но Python 2.7.3 успешно объединяет строки non-ascii: 'In [1]: 'привет' + '' + 'Veseliq' Out [1]: '\ xd0 \ xbf \ xd1 \ x80 \ xd0 \ xb8 \ xd0 \ xb2 \ xd0 \ xb5 \ xd1 \ x82 Veseliq''. –

+0

Его python 2.7, а данные представляют собой двоичные данные двоичного типа – ddinchev

+1

Является ли 'command' unicode? Если да, сначала «закодируйте». – georg

ответ

4

Попробуйте использовать http://docs.python.org/library/array.html (с 'B') вместо строки

+0

Не могли бы вы подробно рассказать? – ddinchev

+0

Уверен - кажется, вы никогда не собирались использовать данные в качестве строки для печати (в этом случае я бы рекомендовал изменить кодировку, используемую в ASCII, для представления в Юникоде). В этом случае использование строки имеет мало смысла и может вызвать непредвиденные проблемы. Мое предложение состояло в том, чтобы использовать тип, который правильно представляет ваше намерение, и затем конкатенировать элементы этого типа (например, используя http://docs.python.org/library/array.html#array.array.extend), «B» представляет unsigned char, который эквивалентен одному байту, который, по-видимому, является правильным представлением, если я правильно понимаю ваши потребности. – Ofir

Смежные вопросы