2017-02-17 65 views
0

當使用SCPI命令查詢我的設備(示波器)以獲取屏幕截圖時,我在Python 2.7中收到此錯誤。嘗試獲取示波器顯示時的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") 

其設法解決的編碼誤差。

相關問題