2017-02-17 36 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") 

にコードを変更しました。

関連する問題