Кодировка строки, возвращаемой GetUserName()
Вопрос
Как мне получить кодировку, которая используется для строки, возвращаемой GetUserName
из win32 API?Я использую pywin32, и он возвращает 8-битную строку.В моем немецком XP эта строка, очевидно, кодируется с использованием Latin-1, но это может быть не так для других установок Windows.
Я мог бы использовать GetUserNameW
, но мне пришлось бы обернуть это самому, используя ctypes , чего я бы хотел пока избежать, если есть более простое решение.
Решение
Ты можешь позвонить GetACP чтобы найти текущую кодовую страницу ANSI, которую используют API, отличные от Unicode.Вы также можете использовать Многобайтовый идентификатор, и передайте ноль в качестве кодовой страницы (CP_ACP определяется как ноль в заголовках Windows), чтобы преобразовать строку кодовой страницы в Юникод.
Другие советы
Я понимаю, что это не прямой ответ на ваш вопрос, но я сильно рекомендую вам решить проблему с использованием Unicode-clean GetUserNameW
как вы уже упомянули.
Неширокие команды работают по-разному в разных выпусках Windows (напримерЯ, хотя я признаю, что пример старый!), так что ИМХО стоит просто разобраться в нем правильно.
Проделав большую работу по разработке многоязычной Windows, хотя wide API может добавить слой перевода или переноса (как вы предлагаете!), оно того стоит.
Хорошо, вот что я использую прямо сейчас:
>>> import win32api
>>> u = unicode(win32api.GetUserName(), "mbcs")
>>> type(u)
<type 'unicode'>
mbcs
является особенным стандартная кодировка в Windows:
Только для Windows:Кодировать операнд в соответствии с кодовой страницей ANSI (CP_ACP)
Из документов API GetUserNameA вернет имя в ANSI, а GetUserNameW вернет имя в Unicode.Вам придется использовать GetUserNameW .