КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Кодировки символов. Unicode.Чтобы реализовать возможность компиляции и ANSI, и Unicode C++ одновременно, нужно заменить в программе заголовочный файл String.h на TChar.h Он помогает создавать универсальный исходный код, способный задействовать как ANSI, так и Unicode. Он состоит из макросов, заменяющих явные вызовы str- или wcs-функций. Если при компиляции исходного кода Вы определяете _UNICODE, макросы ссылаются на wcs-функции, а в его отсутствие — на str-функции.
Существует две функции CreateWindowEx: одна принимает строки в Unicode, другая — в ANSI. Все так, но в действительности прототипы этих функций чуть-чуть отличаются: HWND WINAPI CreateWindowExW ( DWORD dwExStyle, PCWSTR pClassName, PCWSTR pWindowName, DWORD dwStyle, int X, Int Y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, PVOID pParam); HWND WINAPI CreateWindowExA ( DWORD dwExStyle, PCSTR pClasaName, PCSTR pWindowName, DWORD dwStyle, int X, int Y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, PVOID pParam); CreateWindowExW — это Unicode-версия. Буква W в конце имени функции — аббревиатура слова wide (широкий). Буква A в конце имени CreateWindowExA указывает, что данная версия функции принимает ANSI-строки. Windows-функция MultiByteToWideChar преобразует мультибайтовые символы строки в «широкобайтовые». Обратное преобразование выполняет функция WideCharToMultiByte. Все символы в Unicodeпредставлены 16-битными значениями (по 2 байта на каждый). В них нет особых байтов, указывающих, чем является следующий байт – частью того же символа или новым символом. Это значит, что прохождение по строке реализуется простым увеличением или уменьшением значения указателя. Unicode позволяет кодировать 65 536 символов. Для использования Unicode-строк в библиотеки C++ были введены некоторые новые типы данных. Стандартный заголовочный файл String.h модифицирован: в нем определен wchar_t — тип данных, для Unicode-символа: typedef unsigned short wchar_t; Список строковых функций ANSI С++ и эквивалентных им Unicode-функций. 1) char * strcat(char *, const char *); wchar_t * wcscat(wchar_t *, const wchar_t *); 2) char * strchr(const char *, int); wchar_t * wcschr(const wchar_t *, wchar_t), 3) int strcmp(const char *, const char *, int wcscmp(const wchar_t *, const wchar_t *); 4) char * strcpy(char *, const char *), wchar_t * wcscpy(wchar_t *, const wchar_t *), 5) size_t strlen(const char *), size_t wcslen(const wchar_t *), Имена всех Unicode-функций начинаются с wcs — это аббревиатура wide character set (набор широких символов).
|