将字节解码为 ascii 字符串
Decode bytes to ascii string
我使用 pyserial 从外部设备接收字节,格式为:
b'S\rSN 00\rSC 00\rFC 00\rRI 00\rMF 00006643\rTS 0000BA39\rTB 00000000\rCB FFFFFFFF\rCL 002\rI> '
使用代码(片段)完成:
while ser.in_waiting > 0:
output = ser.read(ser.in_waiting)
print(output)
所以我希望将其打印为如下形式的文本:
S
SN 00
SC 00
FC 00
RI 00
MF 00006643
TS 0000BA39
TB 00000000
CB FFFFFFFF
CL 002
I>
但是当我尝试用print(output.decode())
或 print(output.decode('ascii'))
解码它时,我只得到全部 (84) 个字符的一部分:
I> 002FFFFF
怎么了?如何获取所有解码后的文本?
回车 return 字符 '\r'
移动到行的开头而不转到下一行,因此行被覆盖。只需将回车 returns 替换为换行符即可:
print(output.decode().replace('\r', '\n'))
我假设您使用的是 Unix/Linux - 不确定 Windows 上是否不同。
您的字符串中嵌入了回车 returns,您的终端会将其解释为将光标移回当前行开头的指令,从而导致后续文本覆盖之前的文本。
您将看到最后一行的 I>
,然后是上一行的 002
,以及前一行的 FFFFF
(较短的序列不会完全覆盖当前线上的内容)。
解决方案(我不会 在这里;wjandrea 已经发布了它)是用正确的行替换马车 returns
提要。
我使用 pyserial 从外部设备接收字节,格式为:
b'S\rSN 00\rSC 00\rFC 00\rRI 00\rMF 00006643\rTS 0000BA39\rTB 00000000\rCB FFFFFFFF\rCL 002\rI> '
使用代码(片段)完成:
while ser.in_waiting > 0:
output = ser.read(ser.in_waiting)
print(output)
所以我希望将其打印为如下形式的文本:
S
SN 00
SC 00
FC 00
RI 00
MF 00006643
TS 0000BA39
TB 00000000
CB FFFFFFFF
CL 002
I>
但是当我尝试用print(output.decode())
或 print(output.decode('ascii'))
解码它时,我只得到全部 (84) 个字符的一部分:
I> 002FFFFF
怎么了?如何获取所有解码后的文本?
回车 return 字符 '\r'
移动到行的开头而不转到下一行,因此行被覆盖。只需将回车 returns 替换为换行符即可:
print(output.decode().replace('\r', '\n'))
我假设您使用的是 Unix/Linux - 不确定 Windows 上是否不同。
您的字符串中嵌入了回车 returns,您的终端会将其解释为将光标移回当前行开头的指令,从而导致后续文本覆盖之前的文本。
您将看到最后一行的 I>
,然后是上一行的 002
,以及前一行的 FFFFF
(较短的序列不会完全覆盖当前线上的内容)。
解决方案(我不会