类型错误:Unicode字符串不支持,请编码为字节: '\ X08'
我看到这个答案:类型错误:Unicode字符串不支持,请编码为字节: ' X08'
- python3 pySerial TypeError: unicode strings are not supported, please encode to bytes:
- Arduino 'Error communicating...unicode strings are not supported, please encode to bytes' PySerial
但我不理解它。在我的情况下,我有chr(code)
进入serial.write
功能。
我会写b'chr(8)'
吗?
import serial
import pygame
from pygame.locals import *
class RCTest(object):
def __init__(self):
pygame.init()
screen = pygame.display.set_mode((400, 300))
self.ser = serial.Serial('COM3', 9600, timeout = 1)
self.send_inst = True
self.steer()
def steer(self):
while self.send_inst:
for event in pygame.event.get():
print("entered for loop")
if event.type == KEYDOWN:
print("entered event.type == KEYDOWN")
key_input = pygame.key.get_pressed()
print("pygame.key.get_pressed() running")
# complex orders
if key_input[pygame.K_UP] and key_input[pygame.K_RIGHT]:
print("Forward Right")
self.ser.write((chr(6))
elif key_input[pygame.K_UP] and key_input[pygame.K_LEFT]:
print("Forward Left")
self.ser.write((chr(4))
# simple orders
elif key_input[pygame.K_UP]:
print("Forward")
self.ser.write((chr(8))
elif key_input[pygame.K_DOWN]:
print("Reverse")
self.ser.write((chr(2))
# exit
elif key_input[pygame.K_x] or key_input[pygame.K_q]:
print('Exit')
self.send_inst = False
self.ser.write((chr(0))
self.ser.close()
break
elif event.type == pygame.KEYUP:
self.ser.write((chr(0))
if __name__ == '__main__':
RCTest()
运行程序后,我按下了ARROWKEY。
entered for loop
entered for loop
entered for loop
Traceback (most recent call last):
entered event.type == KEYDOWN
File "C:/Users/../rc_control_test.py", line 58, in <module>
pygame.key.get_pressed() running
RCTest()
Reverse
编码为字节:
"string".encode()
>> b'string'
因此,你也许可以这样写:
self.ser.write(("string".encode()))
另外,如果你想在一个时间来写一个字:
self.ser.write("A".encode())
感谢您的帮助,我试过这个'self.ser.write(bytes(chr(8),'UTF-8'))',它完美的工作! –
OK Daniel Lee'self.ser.write(“8”.encode())的效果更好,因为现在我可以通过Arduino控制我的车! –
或者只是'self.ser.write(b'string')'。 –
如果你想发送数字8,但在'字节'的格式,然后哟你只需要'self.ser.write(struct.pack('B',8))',如果你想要一个字符,你可以'self.ser.write(bytes(chr(8),'UTF-8' ))'。 – Torxed
完美的人,它的工作原理!非常感谢:) –
'b'\ x08''或'bytes([8])'是其他选项。 –