Разобраться с юникодными именами пользователей в python mkdtemp

Я был укушенhttp://bugs.python.org/issue1681974 - цитируя оттуда:

Сбой mkdtemp в Windows, если в имени пользователя Windows есть символы, не входящие в ASCII, например, ä или ö. mkdtemp выдает ошибку кодирования. Кажется, это происходит потому, что временный каталог по умолчанию в Windows"c:\documents and settings\<user name>\local settings\temp"

Временное решение, которое использует OP:

try: # workaround for http://bugs.python.org/issue1681974
    return tempfile.mkdtemp(prefix=prefix)
except UnicodeDecodeError:
    tempdir = unicode(tempfile.gettempdir(), 'mbcs')
    return tempfile.mkdtemp(prefix=prefix, dir=tempdir)

У меня есть 2 вопроса:

Почему это должно работать?Насколько это полное доказательство? Из аналогичных вопросов (см. Этот ответ:Python Popen не может использовать правильную кодировку в Windows PowerShell) Я понял, что, возможно, мне стоит использоватьsys.stdout.encoding - Я где-нибудь рядом с отметкой?

Редактировать: на самом деле строка:

print u"input encoding: %s; output encoding: %s; locale: %s" % (
    sys.stdin.encoding,getattr(sys.stdout,'encoding',None),
    locale.getdefaultlocale())

печать

входная кодировка: нет; выходная кодировка: нет; языковой стандарт: ('ja_JP', 'cp932')

так что, возможно, я должен пойти для locale.getpreferredencoding () (см., например,подпроцесс. Открыть с помощью пути Unicode)

Edit2: в комментариях предлагается кодировать префикс в mbcs - к сожалению, это не вариант, так как кодовая база везде ожидает Unicode и рано или поздно взорвется. Размещенный код является упрощенным фрагментом.

Edit3: мой маленький обходной путь, по-видимому, ничего не обходил - попробую:

fsenc = sys.getfilesystemencoding() or 'mbcs'
return tempfile.mkdtemp(prefix=prefix.encode(fsenc)).decode(fsenc)

если есть какой-либо пользователь не ascii, чтобы проверить это.

Между тем, репродукторы ниже не работают для меня:

C:\_\Python27\python.exe -u C:\__\JetBrains\PyCharm 3.4.1\helpers\pydev\pydevconsole.py 18324 18325
PyDev console: starting.import sys; print('Python %s on %s' % (sys.version, sys.platform))
Python 2.7.8 (default, Jun 30 2014, 16:03:49) [MSC v.1500 32 bit (Intel)] on win32
sys.path.extend(['C:\\Dropbox\\eclipse_workspaces\\python\\wrye-bash'])
>>> d = u'ελληνικα'.encode(sys.getfilesystemencoding()); os.environ['TEMP'] = os.path.abspath(d)
>>> import tempfile; tempfile.mkdtemp(prefix=u'x')
u'c:\\users\\mrd\\appdata\\local\\temp\\xtf3nav'

и вариации ...

edit4 - каталог существует в абсолютном смысле:

>>> d = u'ελληνικα'.encode(sys.getfilesystemencoding()); os.path.abspath(d)
'C:\\Dropbox\\eclipse_workspaces\\python\\wrye-bash\\e??????a'
>>> assert os.path.isdir(os.path.abspath(d))
Traceback (most recent call last):
  File "<input>", line 1, in <module>
AssertionError
>>> d = u'ελληνικα'
>>> os.path.abspath(d)
u'C:\\Dropbox\\eclipse_workspaces\\python\\wrye-bash\\\u03b5\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03b1'
>>> assert os.path.isdir(os.path.abspath(d))
>>> 

Ответы на вопрос(1)

Ваш ответ на вопрос