【问题标题】:TypeError: unicode strings are not supported, please encode to bytes: '\x08'TypeError: 不支持 unicode 字符串,请编码为字节:'\x08'
【发布时间】:2017-10-11 10:22:08
【问题描述】:

我读了这个答案:

但我不明白。在我的情况下,我有 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()

运行程序后,我按向下箭头键。

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

【问题讨论】:

  • 如果要发送数字 8,但格式为bytes,则只需发送self.ser.write(struct.pack('B', 8)),如果要发送字符,则发送self.ser.write(bytes(chr(8), 'UTF-8'))
  • 完美的男人,它有效!非常感谢:)
  • b'\x08'bytes([8]) 是其他选项。

标签: python unicode pygame


【解决方案1】:

编码为字节:

"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')
猜你喜欢
  • 2016-06-09
  • 1970-01-01
  • 1970-01-01
  • 2015-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-16
相关资源
最近更新 更多