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



```python

rm = pyvisa.ResourceManager("C:/Windows/System32/visa32.dll")
keithley_analyzer = rm.open_resource('GPIB0::17::INSTR')

visa address没错,但是open这句代码报错了,报错如下:
Traceback (most recent call last):
  File "E:\workspace\project\pythonProject3\main.py", line 46, in <module>
    keithley_analyzer = rm.open_resource(visa_address)
  File "E:\workspace\project\pythonProject3\venv\lib\site-packages\pyvisa\highlevel.py", line 3247, in open_resource
    info = self.resource_info(resource_name, extended=True)
  File "E:\workspace\project\pythonProject3\venv\lib\site-packages\pyvisa\highlevel.py", line 3174, in resource_info
    ret, err = self.visalib.parse_resource_extended(self.session, resource_name)
  File "E:\workspace\project\pythonProject3\venv\lib\site-packages\pyvisa\ctwrapper\functions.py", line 2087, in parse_resource_extended
    res = [
  File "E:\workspace\project\pythonProject3\venv\lib\site-packages\pyvisa\ctwrapper\functions.py", line 2088, in <listcomp>
    buffer_to_text(val)
  File "E:\workspace\project\pythonProject3\venv\lib\site-packages\pyvisa\ctwrapper\types.py", line 74, in buffer_to_text
    return buf.value.decode("ascii")
UnicodeDecodeError: 'ascii' codec can't decode byte 0xb0 in position 0: ordinal not in range(128)

```

https://blog.csdn.net/l769255844/article/details/76579327/

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7772144
  • 这篇博客你也可以参考下:UnicodeDecodeError: 'ascii' codec can't decode byte 0xc0 in position 7: ordinal not in range(128)
  • 除此之外, 这篇博客: 解决“UnicodeDecodeError: 'ascii' codec can't decode byte 0xd7 in position 3: ordinal not in range(128”中的 解决“UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xd7 in position 3: ordinal not in range(128)”一类问题的新方法 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 问题是出来用pyinstaller转py为exe文件时出现的报错,如果是在ide中出错,就可以绕道他处寻解了,与之无关。

    不晓得现在还有没有人使用py2exe工具,py2exe不更新了,使用的时候特别容易出问题,动则什么文件什么依赖包就找不到了,手工都找不到。所以,当你用py2exe时,遇到了问题,五分钟解决不了,就赶紧转用其他工具,比如pyinstaller,不要再纠结了。

    当用pyinstaller时,有时会出现如下报错:

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

    当然有可能,这里的byte不一样,position更有可能不一样。
    这时候,不要慌张去百度后按部就班去做什么的(无非就是在文件头部加个判断转换之类的),大多数情况下,你这里的position和byte和人家的不一定一样,你照做了,固然还是有这个问题。

    这时候你要做的是,认真地分析命令行的提示,

    Traceback往往给出了你出错前程序封装过程的最近十几个轨迹,将轨迹的最后一个,也就是UnicodeDecodeError 错误提示的上面几行给出的运行到的位置。如:

    File "D:\Python27\lib\site-packages\PyInstaller\utils\win32\winmanifest.py", line 721, in load_dom
        (self.filename, manifest.name))
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xd7 in position 3: ordinal not in range(128)

    把错误文件,对应的python代码部分找出来,再根据报错信息想办法进行修改,不知道这么修改,这时候就可以百度了。
    比如说我找到了这个位置,错误提示说“ascii”不能解码,说明这部分代码所用的命令让它解码出错了。我分析了一下,给两个变量加个个str(),不让他误解码,问题就解决了。

    (str(self.filename), str(manifest.name)))

    遇到问题一定要静下心来,认真分析,不要像无头苍蝇似了,复制黏贴错误信息到浏览器,乱试别人的解决方法。知其然不知所以然,最后只会一团糟。

    有人说py2exe太过陈旧缺少维护操作不便,推荐PyInstaller项目 www.pyinstaller.org可用一句命令打包:

    pyinstaller -F -w -i manage.ico app.py
    -F:打包为单文件
    -w:Windows程序,不显示命令行窗口
    -i:是程序图标
    app.py是你要打包的py文件

    另外需要pywin32。安装方法:先跑pip install pywin32再跑pip install pyinstaller即可,多么简单。所以,尽快方法,使用麻烦,又容易出错的py2exe吧。

  • 以下回答由chatgpt基于相关博客总结生成:

    解决方案:

    这个错误表示Python无法使用默认的'ascii'编解码器解码字节,因为该字节不在范围内。解决办法是修改编码方式,指定为utf-8或其他编码方式。具体步骤如下:

    1. 先来看下错误提示中的例子:UnicodeDecodeError: 'ascii' codec can't decode byte 0xb0 in position 0: ordinal not in range(128)。这里的0xb0是出错字节的十六进制表示,position 0 是字节在字符串中的位置。

    2. 分析报错内容,发现Python使用默认的'ascii'编解码器解码字节时出现了错误。可以通过修改编解码器来修复该问题。

    3. 在Python 2.x 中,可以通过以下代码修改编解码器为utf-8,这样就可以将所有的Unicode字符串都转换为utf-8编码,从而避免UnicodeDecodeError错误:

    import sys reload(sys) sys.setdefaultencoding('utf8')

    1. 在Python 3.x 中,字符串默认使用Unicode编码,因此不需要设置默认编解码器。如果需要在字符串和字节之间进行转换,可以使用encode()和decode()方法指定编码方式。

    2. 对于报错代码的例子,可以对代码进行如下修改:

    import numpy as np

    在sort函数中排序字段

    dt = np.dtype([('name', 'S10'), ('age', int)]) y = np.array([("小明", 10), ("小黑", 20), (" 小红", 30), ("小白", 40)], dtype=dt) print("y数组: ") print(y)

    修改排序方式为按照age字段排序

    print("按age排序:") print(np.sort(y, order="age"))

    修改编码方式为utf-8

    print("按name排序:") print(np.sort(y, order="name".encode('utf-8')))

    1. 运行修改后的代码,可以看到此时已经按照'name'字段排序成功,没有出现编解码错误。

    参考资料:

    1. 《Python编程从入门到实践》
    2. https://blog.csdn.net/weixin_39758710/article/details/105228632
    3. https://zhuanlan.zhihu.com/p/27603886