【问题标题】:UnicodeDecodeError when trying to obtain display of oscilloscope尝试获取示波器显示时出现 UnicodeDecodeError
【发布时间】:2017-02-17 07:13:51
【问题描述】:

尝试使用 SCPI 命令查询我的设备(示波器)以获取屏幕截图时,我在 Python 2.7 中收到此错误。

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 编程,并且仍然不知道如何编码或解码为正确的数据类型(我甚至不知道它应该是什么)。

【问题讨论】:

  • 数据类型是字符串,但是你必须知道源产生的编码才能正确解码成有效的字符串。 Python 对此很挑剔,这可能会令人沮丧,但这是有充分理由的——太多的程序是“垃圾进,垃圾出”,因为程序员不了解字符编码的问题。
  • Python 3 具有字节字符串的概念,但作为对 Python 2 的快速而肮脏的修复,您可以将 'latin-1' 指定为应该逐字接受的内容的编码。
  • 什么是InfiniiVision?来自某个特定图书馆的东西?
  • 我试图通过将文件的第一行从 # -- coding: utf-8 -- 更改为 # -- 编码:latin-1 -- 但是我仍然收到同样的错误。

标签: python ascii decode encode


【解决方案1】:

我在更新的手册中找到了修复程序 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")

它设法修复了编码错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-08
    • 2019-01-25
    • 1970-01-01
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    相关资源
    最近更新 更多