Какие функции кодирования Win32 API ожидают? - PullRequest
5 голосов
/ 10 ноября 2010

Например, функция MessageBox имеет типизированный аргумент LPCTSTR для текста и заголовка, который является указателем на символ или указателем на wchar, когда определены _UNICODE или _MBCS, соответственно.

Как функция MessageBox интерпретирует эти строки?Какую кодировку?

Единственное объяснение, которое мне удалось найти, таково:

http://msdn.microsoft.com/en-us/library/cwe8bzh0(VS.90).aspx

Но это ничего не говорит о кодировке?Просто в случае _MBCS один символ занимает один wchar (что в Windows является 16-разрядным), а в случае _UNICODE - один или два символа (8-разрядный).

Таковы версии некоторых MicrosoftUTF-8 и UTF-16, которые игнорируют все, что должно быть закодировано в 3 или 4 байта в случае UTF-8, и все, что должно быть закодировано в 4 байта в случае UTF-16?И есть ли способ показать что-либо за пределами базовой многоязычной плоскости Юникода с помощью MessageBox?

Ответы [ 2 ]

6 голосов
/ 10 ноября 2010

Обычно есть две разные реализации каждой функции:

  • MessageBoxA, который принимает строки ANSI
  • MessageBoxW, который принимает строки Unicode

Здесь «ANSI» означает многобайтовую кодовую страницу, назначенную в данный момент процессу. Это зависит от предпочтений пользователя и настроек локали, хотя на функции Win32 API, такие как WideCharToMultiByte, можно рассчитывать на правильное преобразование, а функция GetACP сообщит вам об используемой кодовой странице. MSDN объясняет кодовую страницу ANSI и как она взаимодействует с Unicode.

«Юникод» обычно означает UCS-2; то есть поддержка символов выше 0xFFFF не согласована. Я не пробовал этого, но функции пользовательского интерфейса, такие как MessageBox в последних версиях (> Windows 2000), должны поддерживать символы вне BMP.

4 голосов
/ 10 ноября 2010

Функции ...A устарели и содержат только функции ...W. Первые были необходимы для совместимости с Windows 9x, но так как они больше не используются, вам следует избегать их любой ценой и использовать исключительно функции ...W. Для них требуются строки UTF-16, единственная встроенная кодировка Windows. Все современные версии Windows должны достаточно хорошо поддерживать символы, отличные от BMP (если, конечно, есть шрифт, содержащий эти символы).

...