Что произойдет, если мое приложение будет запущено на компьютере с UNICODE и в моем приложении будет одна строка std :: string?
Компьютеры не ANSI
или Unicode
, а операционные системы, в которых работают компьютеры. Последней версией Windows, которая не поддерживала Unicode, была Windows 3.11 для рабочих групп. Если вы запускаете приложение, скомпилированное ASCII, на UniCode.
В чем разница между двумя (или более?) Кодировками?
Что такое ASCII?
ASCII - это семибитная методика кодирования, которая присваивает номер каждому из 128 символов, наиболее часто используемых в американском английском. Это позволяет большинству компьютеров записывать и отображать основной текст. ASCII не включает символы, часто используемые в других странах.
Что такое Unicode?
Одним из главных недостатков ASCII было то, что у вас могло быть только 256 разных символов. Однако такие языки, как японский и арабский, содержат тысячи символов. Таким образом, ASCII не будет работать в этих ситуациях. Результатом стал Unicode, который допускал до 65 536 различных символов.
Unicode - это попытка ISO и Консорциума Unicode разработать систему кодирования для электронного текста, которая включает каждый существующий письменный алфавит. Unicode использует 8-, 16- или 32-разрядные символы в зависимости от конкретного представления, поэтому для документов Unicode часто требуется вдвое больше дискового пространства, чем для документов ASCII или Latin-1. Первые 256 символов Unicode идентичны Latin-1.
В Win32 UNICODE поддерживается #, определяя макросы UNICODE
и _UNICODE
. Это, в свою очередь, заставляет вашу программу использовать Unicode-варианты функций Win32.
Есть ли у вас какие-либо рекомендации относительно шагов, которые необходимо предпринять, чтобы обеспечить совместимость кодировки моего приложения?
Каждая функция Win32 (которая принимает или возвращает строку) имеет два варианта: один для ASCII и один для Unicode. И вызов функции разрешается к одному из них в зависимости от того, определен макрос UNICODE или нет. Поэтому вы должны определить макрос и начать использовать Unicode-версии функций. например:
Замена каждого std::string
на std::wstring
,
Замена каждого char
на wchar_t*
Замена каждого литерала string("")
на L""
Использование поддержки TCHAR
в Windows и т. Д.
как вы указали, это список вещей, о которых вам придется позаботиться, учтите, что это не полный список.
По сути, вам придется использовать все версии Unicode типов и вызовов функций в вашем коде.