【问题标题】:encode string in Python 3 without unicode \xc2 subsitution在没有 unicode \xc2 替换的 Python 3 中编码字符串
【发布时间】:2015-04-26 22:51:53
【问题描述】:

所以我正在编写一些代码用于与 pySerial 的硬件进行一些通信,并且我使用的是 python 2.7.7,一切正常,我切换到 python 3.4,因为安装 GUI“框架”时出现问题。

所以我遇到的问题是我必须对发送到 COM 端口的字符串进行编码和解码,而我在 Python 2.7.7 上不需要

这是字符串,我知道十六进制值 81 不是 ascii,但我需要按照在 python 2.7.7 中发送的方式发送字符串。

str = '\x1B\x81'

当我打印 str 我得到这个:

b'\x1b\xc2\x81'

我假设 \xc2 是我的 \x81 的一些特殊 unicode 字符,我知道 \x 是十六进制的转义字符,我不太确定 Python 2.7.7 如何将字符串写入串行端口。

这行:

ser.write('\x1B\x81')

向串口发送二进制文件?有点像这样:

ser.write('0001 1011 1000 0001')

如果我发送这个:

ser.write('\x1B\x81')

对于使用 Python 3 的硬件,硬件只是挂起并且什么都不做,但在 Python 2.7 中它可以工作。

【问题讨论】:

  • 你试过像u'\x1B\x81'这样将字符串二进制化吗?

标签: python string unicode decode encode


【解决方案1】:

Python 2.7 中的值 obj = '\x1B\x81' 在 Python 3 中将是 obj = b'\x1B\x81'。

Python 3 中的值 '\x1B\x81' 是文本,因此您不会将二进制文件发送到硬件(在 Python 2 中这就是所谓的 Unicode 字符串)。

【讨论】:

  • 哦,好的,谢谢,但我想知道是否有比在字符串前面放一个“b”更好的方法来发送二进制文件?
  • 以什么方式更好?对于更长的字节字符串,您可以使用 bytes('aa', encoding='ascii') 将文本转换为字节。
  • 如果我有这条线 ser.write(ESCAPE + HI) ,我如何更改这条线以便它以二进制形式发送,将 b 放在前面是行不通的。哦,我想我明白了:ser.write(bytes(ESCAPE + HI, encoding='ascii'))
  • ESCAPE和HI的类型有哪些?
  • 我尝试了字节的东西,但它不起作用,它们是字符串,常量。 ESCAPE = '\x1B' 和 HI='\x81'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-28
  • 1970-01-01
  • 2017-10-14
  • 1970-01-01
  • 1970-01-01
  • 2017-03-23
  • 2014-12-03
相关资源
最近更新 更多