Вопрос

Как мне получить кодировку, которая используется для строки, возвращаемой 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 .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top