Вот вы можете видеть, что при конвертации из Wide в Narrow некоторые символы могут быть заменены на ?
, Как обнаружить те случаи, когда W2A преобразование применяется к строке. Конверсия туда и обратно — это способ, но не быстрый. Я предполагаю, что при преобразовании функции W2A следует как-то отметить, что преобразование не было полностью возможным. Как получить эту информацию?
РЕДАКТИРОВАТЬ: например, в случае
int WideCharToMultiByte(
UINT CodePage,
DWORD dwFlags,
LPCWSTR lpWideCharStr,
int cchWideChar,
LPSTR lpMultiByteStr,
int cbMultiByte,
LPCSTR lpDefaultChar,
LPBOOL lpUsedDefaultChar
);
Последний аргумент говорит, что мне нужно. Как насчет W2A? Как обнаружить случай?
Чтобы проверить это, используйте WideCharToMultiByte непосредственно. У вас есть указание на то, что там использовался символ по умолчанию, и у вас есть флаги, которые влияют на процесс конвертации.
W2A
использует тот же API с dwFlags
нуля, и lpUsedDefaultChar
NULL, поэтому информация, которая вам нужна, просто не запрашивается вообще.
Других решений пока нет …