【问题标题】:Encoding error, in python3编码错误,在python3中
【发布时间】:2017-10-26 22:22:37
【问题描述】:

我有一个有点类似的问题here,我无法解决。在我的代码的另一个实例中,我面临类似的编码错误。帮忙!

我的代码:

port = serial.Serial("/dev/ttyUSB0", baudrate=9600, timeout=10,     bytesize=8)
f_w = open('/home/ryan/python_serial_output.txt','r+')
f_o = open('/home/ryan/python_serial_parse.txt','w')

port.send_break()
sys_reply = port.read(100000)
sys_reply_str = sys_reply.decode('utf-8')
print(sys_reply_str)
sys_reply_str_haha = sys_reply_str.replace("\r","")
sys_reply_str_haha = sys_reply_str_haha.replace("\n","")
i = list(sys_reply_str_haha)
if str(i[-1]) == '>':
    ip = 'CR1'
    ip_en = ip.encode('utf-8')
    port.write(ip_en)
    read_syscheck = port.read(100000)
    read_syscheck_str = read_syscheck.decode('utf-8')
    print(read_syscheck_str)

是的,效率低下,但我是一步一步写的,以免一开始就出错。

使用这段代码,这就是我得到的结果。

myname@Toshiba:~$ python3 serial_test.py 

Explorer (c) 2009
All rights reserved.
Firmware Version: 34.11  

>
Traceback (most recent call last):
  File "serial_test.py", line 25, in <module>
    read_syscheck_str = read_syscheck.decode('utf-8')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd3 in position 7: invalid continuation byte

我好像错误地编码'CR1',这就是提示错误的原因。 CR1 应该将我的传感器重置为出厂默认设置,并回复确认。

非常感谢您的任何帮助。

【问题讨论】:

  • 出于好奇,print(read_syscheck) 读取端口后产生了什么?
  • 与 print(read_syscheck_str) 的结果相同
  • 我很抱歉,我之前没有考虑清楚并且没有注释掉解码行,因此它遇到了错误。这是 print(read_syscheck_str) 的回复:b'CR1\r\n\x7f\x7f\xd3\x00\x00\x03\x0c\x82\x00\x00........我在 linux因此使用 GTKTerm 与传感器对话作为指导。这是我期待的输出。 .... 版权所有。固件版本:34.11 >CR1 [参数设置为工厂默认值] >
  • 对不起,我是堆栈溢出的新手。 @AetherUnbound

标签: python-3.x utf-8 character-encoding serial-port pyserial


【解决方案1】:

编码方法错误。

正确的是'cp437'

不确定为什么 UTF-8 在中断后工作,但在编写命令后却没有

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    • 2016-03-01
    • 1970-01-01
    • 2017-10-28
    相关资源
    最近更新 更多