What encoding Win32 API functions expect?
encoding, unicode, winapi
Solution
There are normally two different implementations of each function:
- `MessageBoxA`, which accepts ANSI strings
- `MessageBoxW`, which accepts Unicode strings
Here, 'ANSI' means the multi-byte code page currently assigned to the process. This varies according to the user's preferences and locale setting, although Win32 API functions such as `WideCharToMultiByte` can be counted on to do the right conversion, and the `GetACP` function will tell you the code page in use. MSDN explains the ANSI code page and how it interacts with Unicode.
'Unicode' generally means UCS-2; that is, support for characters above 0xFFFF isn't consistent. I haven't tried this, but UI functions such as `MessageBox` in recent versions (> Windows 2000) should support characters outside the BMP.
Problem
For example, MessageBox function has LPCTSTR typed argument for text and caption, which is a pointer to char or pointer to wchar when _UNICODE or _MBCS are defined, respectively. How does the MessageBox function interpret those stings? As which encoding? Only explanation I managed to find is this: http://msdn.microsoft.com/en-us/library/cwe8bzh0(VS.90).aspx But it doesn't say anything about encoding? Just that in case of _MBCS one character takes up one wchar (which is 16-bit on Windows) and that in case of _UNICODE one or two char's (8-bit). So are those some Microsoft's versions of UTF-8 and UTF-16 that ignore anything that has to be encoded in 3 or four bytes in case of UTF-8 and anything that has to be encoded in 4 bytes in case of UTF-16? And is there a way to show anything outside of basic multilingual plane of Unicode with MessageBox?