Приложение Windows C++. У нас есть строка, которая содержит только символы ASCII: std::wstring(L"abcdeABCDE ... any other ASCII symbol")
. Обратите внимание, что это std::wstring
, который использует wchar_t
.байтовое представление символов ASCII в std :: wstring с разными локалями
Вопрос: представление байтов этой строки зависит от настроек локализации или чего-то еще? Могу ли я предположить, что если я получаю такую строку (например, из WindowsAPI), когда приложение работает, ее байты будут такими же, как на моем ПК?
Вы используете строку Unicode, закодированный в UTF-16 во время выполнения. Это не зависит от языка, это Unicode. Все, что вы получаете от winapi, будет Unicode, а также с UNICODE #defined. Строковые литералы с символами, отличными от ASCII, зависят от вашего текстового редактора, сохраняющего файл .cpp в кодировке Unicode, которую компилятор может распознать, используя utf-8 с спецификацией, чтобы он не превращался в mojibake, когда ваш исходный код перемещается в другом месте. –
@ HansPassant Спасибо за отзыв! Но мне нужен только небольшой диапазон символов ASCII (a-zA-Z, пробел, точка). У меня нет большого опыта работы с файлами Windows/Unicode, поэтому я попросил его быть уверенным на 100%. Кажется, я прав, и представление этих символов ни на что не зависит. –
Это может помочь забыть о ASCII. В Win32 API вы используете Unicode/UTF-16. Почти никто не будет использовать весь набор символов Unicode, поэтому почти каждая программа будет использовать подмножество Unicode.Не имеет значения, является ли подмножество, которое вы используете, также подмножеством набора символов, который вы не используете. –