鱼C论坛

 找回密码
 立即注册
查看: 6839|回复: 9

关于python3.4使用serial模块的问题

[复制链接]
发表于 2018-6-1 20:21:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请教:
        我想使用serial模块用串口发送数据,当我配置好所有参数,到最后一步要使用  ser.write("DS12(0,72,1,4);\r\n") 发送字符串的时候,
显示   TypeError:Unicode字符串不受支持,请将其编码为字节:‘ds 12(0,72,1,4)rn’  的错误,但是发送数字就可以,如ser.write(1) 应该如何解决
        我在网上搜索了这个错误,但是没有答案,我怀疑应该是 write不支持unicode编码格式,我想将字符串改为 utf-8 格式 ,又出现了很多错误,实在没法了,麻烦下各位
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-6-4 20:48:58 | 显示全部楼层
本帖最后由 fish_游鱼 于 2018-6-4 20:50 编辑

将发送的数据用 encode()方法编码成bytes对象就行。
在Python2中因为默认ASCII编码所以没有这种问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-5 13:14:55 | 显示全部楼层
fish_游鱼 发表于 2018-6-4 20:48
将发送的数据用 encode()方法编码成bytes对象就行。
在Python2中因为默认ASCII编码所以没有这种问题。

首先谢谢您  这个问题我以经解决了,但是接收数据又出现了问题,总是报错:单解码错误:‘utf-8’编解码器无法解码位置1中的字节0 xff:无效开始字节,哎  
等我实在弄不了就在问一问吧,应该就是编码格式的问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-5 13:27:27 | 显示全部楼层
平淡最真 发表于 2018-6-5 13:14
首先谢谢您  这个问题我以经解决了,但是接收数据又出现了问题,总是报错:单解码错误:‘utf-8’编解码器 ...

因为传输的是二进制流,你可以试试用decode()方法将数据解码出来。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-6 07:31:50 | 显示全部楼层
fish_游鱼 发表于 2018-6-5 13:27
因为传输的是二进制流,你可以试试用decode()方法将数据解码出来。
  1. #coding=utf-8
  2. import time
  3. import serial
  4. def sleep(mytime): #sleep为函数名
  5.     time.sleep(mytime)
  6. ser=serial.Serial ('COM6')  #选择串口
  7. ser.baudrate=115200   #配置波特率
  8. ser.bytesize =8     #配置数据位数
  9. ser.stopbits = 1    #配置停止位
  10. ser.parity=serial.PARITY_NONE    #配置奇偶校验位
  11. data = ' '


  12. d = c.encode(encoding="utf-8")
  13. print (type(d))  #d 是字节
  14. ser.write(d)

  15. print (ser.portstr)

  16. if 0:
  17.     a = input(r"请输入您要显示的内容:")
  18.     b = a.encode(encoding="utf-8")
  19.     ser.write(b)

  20. elif 1:
  21.     while 1:
  22. #        i=i+1
  23. #        a=('DS24 80,80, count:%d \r\n'%i)
  24. #        b = a.encode(encoding="utf-8")
  25. #        ser.write(b)

  26.         data = ser.read(2)   #读取10个字节
  27.         print(type(data))
  28.         data = data.decode('utf-8')
  29.         print(type(data))
  30.         print(data)
  31.         sleep(1)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-6 08:02:37 | 显示全部楼层
fish_游鱼 发表于 2018-6-5 13:27
因为传输的是二进制流,你可以试试用decode()方法将数据解码出来。
  1. #coding=utf-8
  2. import time
  3. import serial
  4. def sleep(mytime): #sleep为函数名
  5.     time.sleep(mytime)
  6. ser=serial.Serial ('COM6')  #选择串口
  7. ser.baudrate=115200   #配置波特率
  8. ser.bytesize =8     #配置数据位数
  9. ser.stopbits = 1    #配置停止位
  10. ser.parity=serial.PARITY_NONE    #配置奇偶校验位

  11. i = 0
  12. data = ''

  13. d = c.encode(encoding="utf-8")
  14. print (type(d))  #d 是字节
  15. ser.write(d)

  16. print (ser.portstr)

  17. if 0:
  18.     a = input(r"请输入您要显示的内容:")
  19.     b = a.encode(encoding="utf-8")
  20.     ser.write(b)

  21. elif 1:
  22.     while 1:
  23. #        i=i+1
  24. #        a=('DS24 80,80, count:%d \r\n'%i)
  25. #        b = a.encode(encoding="utf-8")
  26. #        ser.write(b)

  27.         data = ser.read(2)   #读取10个字节
  28.         print(type(data))
  29.         data = data.decode('utf-8')
  30.         print(type(data))
  31.         print(data)
  32.         sleep(1)
复制代码


以上就是源代码了,发送都是好用的,就是读取报错
运行结果:
<class 'bytes'>
COM6
<class 'bytes'>
Traceback (most recent call last):
  File "C:\Users\PC\Desktop\工程\python工程\积累\串口屏上位机\串口屏上位机计数\串口屏上位机.py", line 36, in <module>
    data = data.decode('utf-8')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

打印出来了读取的数据类型,说明读取成功,当我想将data解码成unicode码的时候,就会出错了
我在网上找了许多解决方法,都没有成功,会不会是我单片机输出字符的编码有问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-7 15:30:31 | 显示全部楼层
平淡最真 发表于 2018-6-6 08:02
以上就是源代码了,发送都是好用的,就是读取报错
运行结果:

试试用gbk或者gb2312解码?
此外有个chardet第三方库可以做到编码识别,不行的话你可以尝试一下。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-9 07:36:16 | 显示全部楼层
fish_游鱼 发表于 2018-6-7 15:30
试试用gbk或者gb2312解码?
此外有个chardet第三方库可以做到编码识别,不行的话你可以尝试一下。

感觉编码这方面应该在深入了解下,然后在来解决问题,还是这方面基础薄弱啊,真的是麻烦您了  谢谢
然后弱弱问一句,您可以推荐一下这方面的教程吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-9 14:03:52 | 显示全部楼层
平淡最真 发表于 2018-6-9 07:36
感觉编码这方面应该在深入了解下,然后在来解决问题,还是这方面基础薄弱啊,真的是麻烦您了  谢谢
然后 ...


没事,我也是初学者,编码方面的知识网上就有不少详细的讲解你可以搜搜看,推荐你一个知乎上的回答你可以看看
Python 编码为什么那么蛋疼? - Alex-金角大王的回答 - 知乎
https://www.zhihu.com/question/31833164/answer/381137073
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-10 08:03:38 | 显示全部楼层
fish_游鱼 发表于 2018-6-9 14:03
没事,我也是初学者,编码方面的知识网上就有不少详细的讲解你可以搜搜看,推荐你一个知乎上的回答你可 ...

谢谢  昨天看了一下,很详细
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-12-30 14:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表