You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
assignee=Noneclosed_at=<Date2018-02-13.09:18:06.475>created_at=<Date2017-12-19.00:24:51.164>labels= ['3.8', 'type-bug', '3.7', 'OS-windows']
title='Wrong ANSI encoding used by subprocess for some locales'updated_at=<Date2018-02-13.09:18:06.474>user='https://github.com/segevfiner'
The following test is failing randomly for me (python -m test test_uuid -v):
ERROR: test_ipconfig_getnode (test.test_uuid.TestInternalsWithoutExtModule)
Traceback (most recent call last):
File "cpython\lib\test\test_uuid.py", line 551, in test_ipconfig_getnode
File "cpython\lib\uuid.py", line 487, in _ipconfig_getnodefor line in pipe:
File "cpython\lib\encodings\cp1255.py", line 23, in decodereturn codecs.charmap_decode(input,self.errors,decoding_table)
UnicodeDecodeError: 'charmap' codec can't decode byte 0x8d in position 682: character maps to <undefined>
This is caused by trying to decode the output of "ipconfig" using cp1255, while the output really uses cp862 and annoyingly it started to print times using the current locale (Which displays broken in the console anyhow, question mark boxes... *sigh*) in some Windows version (Using Windows 10.0.16299 ATM).
ipconfig uses (or defaults to) OEM encoded output when writing to a pipe or file. On the other hand, Python's TextIOWrapper defaults to ANSI (i.e. 'mbcs'). In 3.6+, uuid._ipconfig_getnode could be rewritten to call subprocess.Popen with the new 'oem' encoding.
In Windows 10, the networking command-line utilities (e.g. ipconfig, netstat, nbtstat, ping, tracert, hostname, finger, and ftp) support an "OutputEncoding" environment variable. Its value can be set to "Unicode" (UTF-16), "UTF-8", or "Ansi". I don't think this is supported in Windows 7, however.
The patch looks good, but the rest of the code for this looks horrible(and potentially a security risk)... maybe we ought to take this fix for now but prioritise replacing this whole function with a C implementation or at least a better search for the ipconfig tool.