Этот корейский текст (в кавычках) «2013-03-22 =0E?@HD=0F 05:30» не преобразуется должным образом MultiByteToWideChar в Unicode. Цитатно-печатная форма здесь предназначена только для размещения здесь этого текста, фактическое содержимое содержит байты 0xE и 0xF.
MultiByteToWideChar(50225, 0, bs.pData, bs.nSize, pData + nSize, nConvertedLen);
=0E?@HD=0F преобразуется как есть, и результирующий Unicode содержит символы ASCII 0xE и 0xF. Однако я обнаружил, что вместо этих символов там должна появиться пара корейских символов. Я всегда думал, что международные последовательности символов начинаются с байта с кодом больше 127, но недавно обнаружил, что это не так. Однако MultiByteToWideChar по-прежнему думает так же, как и я, и отказывается обрабатывать 0xE ? @ HD 0xF как пара корейских символов, отличных от ASCII, кодовой страницы 50225 (или 949). Когда я делаю то же самое на том же компьютере, используя функции .NET (например, Encoding.GetEncoding(50255).GetString), я правильно получаю результаты преобразования и корейские символы. Но MultiByteToWideChar не работает. Я пробовал разные флаги, которые вы можете установить для MultiByteToWideChar (MB_COMPOSITE и т. д.), но все равно не повезло.
Как заставить MultiByteToWideChar работать правильно? Если это имеет значение, я на WinXP SP3. Опять же, способ .NET работает нормально, и внутренне Encoding.GetString, похоже, вызывает MultiByteToWideChar.