В Windows есть функции, такие как mbstowcs
для преобразования между char и wchar_t. Существуют также функции C++, такие как from_bytes<std::codecvt<wchar_t, char, std::mbstate_t>>
.Как преобразование между char и wchar_t работает в Windows?
Но как это работает в кулисах, поскольку char и wchar_t, очевидно, имеют разный размер? Я предполагаю, что системная кодовая страница каким-то образом связана? Но что произойдет, если wchar_t не может быть скоррелирован с char (в конце концов, он может содержать намного больше значений)?
Также, что происходит, если код, который должен использовать символ (возможно, из-за библиотеки), перемещается между компьютерами с разными кодовыми страницами? Скажите, что только с использованием чисел (0-9), которые находятся в пределах диапазона ASCII, всегда будет безопасно?
И, наконец, что происходит на компьютерах, где местный язык не может быть представлен в 256 символах? В этом случае понятие char кажется совершенно несущественным, кроме как для хранения, например, utf8.
'Но что произойдет, если wchar_t не может быть скоррелирован с char (в конце концов, он может содержать намного больше значений)? Это именно то, о чем нужно беспокоиться. Реальный ответ - «не конвертировать в char». Если у вас есть данные wchar_t/UTF16 и вы не хотите потерять контент, просто сохраните его как есть. (есть, конечно, другие кодировки, которые могут быть преобразованы без потерь, но обычные стандартные однобайтовые кодировки не входят в число них) – deviantfan
Последний параметр Microsoft [mbstowcs] (https://msdn.microsoft.com). /en-us/library/k1f9b8cy.aspx?f=255&MSPPError=-2147217396) является [locale] (https://msdn.microsoft.com/en-us/library/wyzd2bce.aspx), который контролирует, как будет выполняться преобразование , [Стандартный] (http://en.cppreference.com/w/cpp/string/multibyte/mbstowcs) использует [setlocale] (http://en.cppreference.com/w/cpp/locale/setlocale). Это патологические. Интернационализация в любом надежном приложении должна обрабатываться специальной (Unicode) библиотекой (icu, Qt, boost, ...) – Drop
О других двух проблемах, опять же, не конвертировать кодировку Unicode в 256-значный код, кодирование. – deviantfan