简体   繁体   中英

UnicodeEncodeError in PyWinUSB with Python 2.7.9?

So, I'm trying to work with PyWinUSB, but I can't get very far because I keep getting a UnicodeEncodeError .

The code:

import pywinusb.hid as hid
hid.find_all_hid_devices()

The ouput:

[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)

Note that this only happens when I have my external keyboard and mouse plugged in (It's a Microsoft wireless combo).

This is what I get in Python 3.4 when I try the same code.

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}

However, if I try to do a print for each item with Python 3.4, I get this:

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>

Any ideas on how I can fix this?

This is not a pyWinUsb issue, it's actually a design issue on Python 2.x.

By default, there is no character decoding management on stdout writing.

USB device strings are Unicode UTF-8 encoded, so it is safe to install a character decoder (from pyWinUsb show_hids.py example):

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM