pyvisaを使用して、いくつかの楽器と話すことができます。UnicodeDecodeError: 'ascii'コーデックは、pyvisaデバイスから読み込まれた文字列をデコードできません。
self.receiver.write("mmem:data? \'traceData.DAT\'")
sleep(2)
data_string = self.receiver_visa.read()
書き込み部分が実際にそのデータを読み取るために、読み取りを()を使用して、その後、どこのデータを見つけるために楽器を教えて、それはそれを見つけるためにのために2秒待ってから、することです:私はこのようなコードを持っています。データは次のようになります。
'#525817Type;ESU;\r\nVersion;4.73;\r\nDate;10.May 17;\r\nMode;ANALYZER;\r\nCenter Freq;13560000.000000;Hz\r\nFreq Offset;0.000000;Hz\r\nSpan;1000000.000000;Hz\r\nx-Axis;LIN;\r\nStart;13060000.000000;Hz\r\nStop;14060000.000000;Hz\r\nRef Level;-36.000000;dBm\r\nLevel Offset;0.000000;dB\r\nRef Position;100.000000;%\r\ny-Axis;LOG;\r\nLevel Range;100.000000;dB\r\nRf Att;10.000000;dB\r\nRBW;10000.000000;Hz\r\nVBW;30000.000000;Hz\r\nSWT;0.040000;s\r\nTrace Mode;CLR/WRITE;\r\nDetector;MAXPEAK;\r\nSweep Count;0;\r\nTrace 1:;;\r\nx-Unit;Hz;\r\ny-Unit;dBm;\r\nPreamplifier;NOT AVAILABLE;\r\nTransducer;OFF;\r\nValues;625;\r\n13060000;-101.74840545654297;\r\n13061602.564102564;-102.10520935058594;\r\n13063205.128205128;-105.79591369628906;\r\n13064807.692307692;-111.44921875;\r\n13066410.256410256;-106.73763275146484;\r\n13068012.82051282;-105.97975158691406;\r\n13069615.384615384;-103.39719390869....
をしかし、私はこのコードを実行すると、私は
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 243: ordinal not in range(128)
はので、私は問題がUTF-8を使用していないのpythonについてだと思うというエラーメッセージが表示されました。私は入れようとしました
#!/usr/bin/env python
# -*- coding: utf-8 -*-
ソースコードのヘッダーには役立ちません。私はちょっとした研究をしましたが、string.decode( 'utf-8')のやり方が示唆されていますが、私はpyvisaデバイスから直接読んでいるので、これはうまくいきません。誰かが助けてくれますか?添付
TIA
はフルトレースバックです:
>>> import pyvisa
>>> rm = pyvisa.ResourceManager()
>>> rm.list_resources()
('TCPIP0::178.168.48.147::inst0::INSTR', 'TCPIP0::178.168.48.21::inst0::INSTR', 'TCPIP0::178.168.48.30::inst0::INSTR', 'ASRL10::INSTR', 'GPIB0::5::INSTR', 'GPIB0::20::INSTR')
>>> maturo = rm.open_resource('GPIB0::20::INSTR')
>>> esu = rm.open_resource('GPIB0::20::INSTR')
>>> esu.query("*IDN?")
'Rohde&Schwarz,ESU-40,100348/040,4.73\n'
>>> esu.write("mmem:del \'traceData.DAT\'")
(26, <StatusCode.success: 0>)
>>> esu.write("mmem:cdir \'D:\'")
(16, <StatusCode.success: 0>)
>>> esu.write("hcop:dev:lang DAT")
(19, <StatusCode.success: 0>)
>>> esu.write("hcop:dest \'mmem\'")
(18, <StatusCode.success: 0>)
>>> esu.write("mmem:stor:trac 1,\'traceData.DAT\'")
(34, <StatusCode.success: 0>)
>>> esu.write("mmem:data? \'traceData.DAT\'")
(28, <StatusCode.success: 0>)
>>> esu.read()
Traceback (most recent call last):
File "<pyshell#12>", line 1, in <module>
esu.read()
File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\pyvisa\resources\messagebased.py", line 332, in read
message = self.read_raw().decode(enco)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 241: ordinal not in range(128)
この例外の*完全なトレースバック*を含める必要があります。そのため、原因を適切に評価することができます。 –
いいえ、ソースコードのエンコーディングが原因ではありません。これは、文字列リテラルがどのようにデコードされるかにのみ影響し、他の場所から読み取られるデータには影響しません。 –
@MartijnPietersご回答ありがとうございます。私は今トレースバックを入れます。しかし、私はそれが大いに役に立つとは思わない... –