0

所以,我正在尝试使用 PyWinUSB,但我不能走得太远,因为我不断得到一个UnicodeEncodeError.

编码:

import pywinusb.hid as hid
hid.find_all_hid_devices()

输出:

[Traceback (most recent call last):  
  File "<stdin>", line 1, in <module>  
UnicodeEncodeError: 'ascii' codec can't encode character u'\xae' in position 91: ordinal not in range(128)

请注意,这只发生在我插入外部键盘和鼠标时(这是 Microsoft 无线组合)。

当我尝试相同的代码时,这就是我在 Python 3.4 中得到的结果。

HID device (vID=0x045e, pID=0x00e3, v=0x0053); Microsft; Microsoft Wireless Optical Desktop\xae 2.20, Path: \\?\hid#vid_045e&pid_00e3&mi_01&col01#8&a279d5&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}  
HID device (vID=0x045e, pID=0x00e3, v=0x0053); Microsft; Microsoft Wireless Optical Desktop\xae 2.20, Path: \\?\hid#vid_045e&pid_00e3&mi_01&col03#8&a279d5&0&0002#{4d1e55b2-f16f-11cf-88cb-001111000030}  
HID device (vID=0x045e, pID=0x00e3, v=0x0053); Microsft; Microsoft Wireless Optical Desktop\xae 2.20, Path: \\?\hid#vid_045e&pid_00e3&mi_01&col04#8&a279d5&0&0003#{4d1e55b2-f16f-11cf-88cb-001111000030}

但是,如果我尝试print使用 Python 3.4 为每个项目做一个,我会得到:

Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
  File "C:\Python34\lib\encodings\cp437.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_map)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\xae' in position 91: character maps to <undefined>

关于如何解决这个问题的任何想法?

4

1 回答 1

0

这不是 pyWinUsb 问题,它实际上是 Python 2.x 上的设计问题。

默认情况下,stdout 写入没有字符解码管理。

USB 设备字符串是 Unicode UTF-8 编码的,因此安装字符解码器是安全的(来自 pyWinUsbshow_hids.py示例):

if sys.version_info < (3,): import codecs output = codecs.getwriter('mbcs')(sys.stdout) else: # python3, you have to deal with encodings, try redirecting to any file output = sys.stdout

于 2015-11-14T20:13:59.033 回答