类型错误:Unicode字符串不支持,请编码为字节: '\ X08'

问题描述:

我看到这个答案:类型错误:Unicode字符串不支持,请编码为字节: ' X08'

但我不理解它。在我的情况下,我有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 
+0

如果你想发送数字8,但在'字节'的格式,然后哟你只需要'self.ser.write(struct.pack('B',8))',如果你想要一个字符,你可以'self.ser.write(bytes(chr(8),'UTF-8' ))'。 – Torxed

+0

完美的人,它的工作原理!非常感谢:) –

+0

'b'\ x08''或'bytes([8])'是其他选项。 –

编码为字节:

"string".encode() 
>> b'string' 

因此,你也许可以这样写:

self.ser.write(("string".encode())) 

另外,如果你想在一个时间来写一个字:

self.ser.write("A".encode()) 
+0

感谢您的帮助,我试过这个'self.ser.write(bytes(chr(8),'UTF-8'))',它完美的工作! –

+0

OK Daniel Lee'self.ser.write(“8”.encode())的效果更好,因为现在我可以通过Arduino控制我的车! –

+0

或者只是'self.ser.write(b'string')'。 –