Re[2]: Объясните новичку про UNICODE
От: Misha87  
Дата: 24.10.05 06:55
Оценка: 2 (1)
Здравствуйте, aik, Вы писали:

Спасибо большое. Но каша, бывшая до этого в голове, не исчезла, а только немного размазалась по стенкам черепа.

Итак:
aik>Таблиц ANSI — до черта, на каждый язык — по таблице. unicode — только одна. Это тот вариант юникода, в котором 2 байта на символ (бывают и другие, в виндах их нет), его и называют в винде просто UNICODE. Глядеть — открывай character map и смотри.
А>>2) Есть строка кодов. Однозначно ли по ней определяется строка символов? Если нет, то как это обходят?
aik>Для юникода — да. Для ANSI — надо знать локаль строки (ну там системная, или локаль треда). Для этого в MultiByteStringToWideCharString и есть нужные дополнительные параметры, которые, кстати, в RC скриптах и лежат в том числе рядом со строковыми ресурсами.

С этим понтяно. Далее очень бы хотелось рассуждать именно в терминах этих таблиц.
Как мне завести уникодную строку в коде? это уже видимо будет не char*? А как? И как в эту строку засунуть фразу "ПриветМир"?

А>>5) Есть две функции WideCharStringToMultiByteString и MultiByteStringToWideCharString. Что они из себя представляют? Как работаюют внутри?

aik>Буквы из массива в массив перекладывают.

Имелось ввиду как они сопоставлют символ символлу (в терминах таблиц символов)

А>>6) Как происходит процесс отображения строки на экран в различных ОС?

aik>Из фонтов выковыривают. В фонтах покруче на все буквы есть начертания, полажовее — только на некоторые (скажем, латинские + кириллица).

Так, а тут стоп. У нас есть только строка кодов символов. Чтобы отобразить её нужно сказать каким шрифтом — это ясно. Условно скажем — внутри системы етсь функция WriteString(строка, шрифт).
Что происходит? Как ОС расчухивает что за строка и как она сопосталяет её со шрифтом? Какую тут играет роль поле CharSet структуры LOGFONT? Ведь именно тут мы из "Привет" получаем "??????"

А>>7) Например, я написал в программе MessageBoxA("HelloWorld"). Эта Строка будет нормально отображаться под любыми виндами с любым языком? У китайцев будет? А если написал MessageBoxW("HelloWorld")??

aik>На латинице — будет, всегда. На китайском — тебе придется руками заделать константную строку в uft8, затем (если win9x) вызвать MessageBoxA, либо (в winnt) MultiByteStringToWideCharString(uft8->unicode) MessageBoxW. Или поместить строку в ресурс, там все строки в юникоде, только страну не перепутай, потому что RC скрипт — все равно ANSI и его надо корректно конвертить в unicode.

Опять непонятно. Можно чуть-чуть псевдокода?

Вот есть у нас такая штука
Const char* str = "HelloWorld";
Вообще эта строка в чем? В UNICODE?
Что нужно сделать чтобы Везде она отображалась как нужно?


Остальное — дальше
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.