2017-02-17 39 views
0

Я получаю эту ошибку в Python 2.7 при попытке запросить мое устройство (осциллограф) с помощью команд SCPI для получения захвата экрана.UnicodeDecodeError при попытке получить отображение осциллографа

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

Вот соответствующая строка кода, а также отладочные:

InfiniiVision.query(":DISPlay:DATA? PNG, COLor") 

#Traceback 

    File "C:/Users/William/Desktop/example3.py", line 334, in <module> 
    InfiniiVision.query(":DISPlay:DATA? PNG, COLor") 

    File "C:\ProgramData\Anaconda2\lib\site-packages\pyvisa\resources\messagebased.py", line 407, in query 
    return self.read() 

    File "C:\ProgramData\Anaconda2\lib\site-packages\pyvisa\resources\messagebased.py", line 332, in read 
    message = self.read_raw().decode(enco) 

Я посмотрел на других форумах, и увидели, что кодирование/декодирование является корнем ошибки, однако есть только что начал программировать в Python, и я все еще потерял о том, как кодировать или декодировать правильный тип данных (который я даже не знаю, каким он должен быть).

+0

Тип данных - строка, но вы должны знать кодировку, которую производит источник, чтобы правильно декодировать ее в допустимую строку. Python придирчив к этому, и это может расстраивать, но это по хорошей причине - слишком много программ «мусор, мусор», потому что программист не понимал проблем с кодировкой символов. – tripleee

+0

Python 3 имеет понятие байтовой строки, но в качестве быстрого и грязного исправления для Python 2 вы можете указать '' latin-1'' как кодировку для материала, которая должна быть просто принята дословно. – tripleee

+0

Возможный дубликат [Преобразование байтов в строку Python] (http://stackoverflow.com/questions/606191/convert-bytes-to-a-python-string) – tripleee

ответ

0

Исправление я нашел в обновленном руководстве найдено here.

Он изменил код из

sDisplay = do_query_string(":DISPlay:DATA? PNG, COLor") 
sDisplay = get_definite_length_block_data(sDisplay) 

обновленных

sDisplay = do_query_ieee_block(":DISPlay:DATA? PNG, COLor") 

, который удался исправить ошибку кодирования.

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