Python3在访问字符设备时提供UnicodeDecodeError
有一天,我在网上发现了一个页面,其中包括解释Linux上游戏板的输入。代码如下:Python3在访问字符设备时提供UnicodeDecodeError,python,python-3.x,Python,Python 3.x,有一天,我在网上发现了一个页面,其中包括解释Linux上游戏板的输入。代码如下: import sys pipe = open('/dev/input/js0','r') while 1: for character in pipe.read(1): sys.stdout.write(repr(character)) sys.stdout.flush() 该程序用于打开连接到USB端口的Logitech双动作游戏板的角色设备文件。在Python 2.7下
import sys
pipe = open('/dev/input/js0','r')
while 1:
for character in pipe.read(1):
sys.stdout.write(repr(character))
sys.stdout.flush()
该程序用于打开连接到USB端口的Logitech双动作游戏板的角色设备文件。在Python 2.7下运行程序时,我得到了预期的输出:
'\x0c''\xe0''E''\x00''\x01''\x00''\x01''\x01''D''\xe0''E''\x00''\x00''\x00'
'\x01''\x01''\xbc''^''F''\x00''\x01''\x00''\x01''\x05''<''_''F''\x00''\x00'
'\x00''\x01''\x05'
'\x0c'\xe0''E'\x00'\x01'\x00'\x01'\x01''D'\xe0''E'\x00'\x00'
“\x01”“\x01”“\xbc”“^”F”“\x00”“\x01”“\x00”“\x01”“\x05”“您不会从游戏板接收字符,只能接收字节。因此,您需要读取字节而不是字符。并非所有字节序列都将转换为有效字符,这就是您收到错误的原因
有关如何以二进制模式打开和读取的详细信息,请参阅位于的Python文档中的open
方法。您不会从游戏板接收字符,只接收字节。因此,您需要读取字节而不是字符。并非所有字节序列都将转换为有效字符,这就是您收到错误的原因
pipe = open('/dev/input/js0','rb')
有关如何以二进制模式打开和读取的详细信息,请参阅位于的Python文档中的open
方法。如果需要原始字节,则需要以二进制模式打开它
pipe = open('/dev/input/js0','rb')
如果需要原始字节,则需要以二进制模式打开它
pipe = open('/dev/input/js0','rb')
工作得很有魅力。唯一的区别是我得到了一个数字串而不是数据块,这可能更容易处理。非常感谢你,工作很有魅力。唯一的区别是我得到了一个数字串而不是数据块,这可能更容易处理。非常感谢。我确实检查了Python文档中的open(),但我尝试了“r+b”而不是“rb”。现在回想起来,我看到了这样的情况:“因此,当打开一个二进制文件时,应该在mode值后面附加'b',以二进制模式打开文件,这将提高可移植性。”我确实检查了Python文档中的open(),但我尝试了'r+b'而不是'rb'。现在回想起来,我看到了这样的情况:“因此,当打开一个二进制文件时,您应该在mode值后面附加'b',以二进制模式打开文件,这将提高可移植性。”