Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.18;
Скачать: CL | DM;

Вниз

Юникод в базовых функциях Windows   Найти похожие ветки 

 
Trible   (2007-01-27 12:24) [0]


> Все базовые функции для создания окон, вывода текста,
>  операций со строками и т. д. ожидают передачи
> Unicode-строк (начиная с win 2000). Если какой-то функции
> Windows передается ANSI-строка, она сначала преобразуется
> в Unicode и лишь потом передается операционной системе.
> Если Вы ждете результата функции в виде ANSI-строки, операционная
> система преобразует строку — перед возвратом в приложение
> - из Unicode в ANSI. Все эти преобразования протекают скрытно
> от Вас, но, конечно, на них тратятся и лишнее время, и лишняя
> намять. Рихтер.


Если это действительно так, тогда я не пойму зачем это делать для всех базовых функций?? Ведь например для создания окна нужен английский язык.
Или я буду класс окна писать на арабском??
Что думают опытные?


 
palva ©   (2007-01-27 13:36) [1]

А что такое базовые функции? Функции Windows API, с которыми работает приложение юникода не требуют. Вернее, там где есть символьные параметры имеются два варианта функции: ANSI и UNICODE.


 
Zeqfreed ©   (2007-01-27 13:41) [2]

Внутреннее представление всех строк — в юникоде. Другое дело, что если они хранятся в форме UTF-8, то на размер и производительность для английского алфавита это не влияет.


 
Psychedelic ©   (2007-01-27 13:44) [3]


> Функции Windows API, с которыми работает приложение юникода
> не требуют.

Не требуют, но

> В Windows 2000 функция CreateWindowExA и другие базовые
> — просто шлюз (транслятор), который выделяет память для
> преобразования строк из ANSI в Unicode и вызывает CreateWindowExW,
>  передавая ей преобразованные строки. Когда CreateWindowExW
> вернет управление, CrealeWindowExA освободит буферы и передаст
> Вам описатель окна.

Рихтер. :)


 
SRG*   (2007-01-27 22:23) [4]

Это что ж теперь хошь не хошь на юникод переходить??
Да уж , стратегия у MS


 
колхоз глазами хакера   (2007-01-27 23:01) [5]

Ага... В 2007 году узнал, что с 2000 года МС на юникод перетаскивает и огорчился...


 
Gero ©   (2007-01-27 23:10) [6]

> [4] SRG*   (27.01.07 22:23)
> Это что ж теперь хошь не хошь на юникод переходить??

Нет, не хочешь — не переходи.


 
wl ©   (2007-01-27 23:15) [7]

зря вы так про юникод... не для всех алфавитов хватает 256 символов (например, в японском). И то, что винда с ним работает, реально облегчает положение, когда приходится эти иероглифы на экран выводить, да и вообще с ними работать.


 
колхоз глазами хакера   (2007-01-27 23:17) [8]

что именно "зря мы"?


 
wl ©   (2007-01-27 23:20) [9]

кстати вопрос в догонку, кто-нибудь знает нормальный, адекватный, онлайн (или оффлайн) переводчик с китайского?
пока что пользуюсь бетой переводчика гугл
http://translate.google.com/translate_t
перевод длинных(и не очень, к примеру, "Выход" по-китайски переводит как "From") предложений сильно смахивает на то, как переводит промт.
http://babelfish.altavista.com/ - ваще непонятно что, и к тому же пихают рекламу при переводе любого предложения.


 
Zeqfreed ©   (2007-01-28 01:08) [10]

Кажется, гугл за свой переводчик с китайского (или на?) получил какую-то награду, так что я не думаю, что есть что-то более достойное.


 
Gero ©   (2007-01-28 02:33) [11]

> [9] wl ©   (27.01.07 23:20)
> адекватный

А, это запросто, в Китае их — куча.


 
SRG*   (2007-01-29 14:42) [12]

А что можно почитать полезного, потипу Рихтера?


 
Игорь Шевченко ©   (2007-01-29 14:54) [13]


> Если это действительно так, тогда я не пойму зачем это делать
> для всех базовых функций?? Ведь например для создания окна
> нужен английский язык.


почему именно английский ?


 
Gero ©   (2007-01-29 14:56) [14]

> [12] SRG*   (29.01.07 14:42)

Рихтера.


 
Psychedelic ©   (2007-01-29 16:20) [15]


> почему именно английский ?

Ну я думаю вы поняли что автор имел ввиду не техническую проблему.

В 99.9% испольуют английский, а вы Игорь - используюте русский в указании класса окна?


 
clickmaker ©   (2007-01-29 16:28) [16]

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


 
Игорь Шевченко ©   (2007-01-29 17:43) [17]

Psychedelic ©   (29.01.07 16:20) [15]

Я сильно извиняюсь, но CreateWindow(Ex)W подразумевает, что не только класс окна может быть на родном языке, но и параметры в сообщениях будут тоже передавать с учетом Unicode. То есть, в окно, созданное CreateWindow(Ex)A текст нельзя будет вывести на языке, для которого не предусмотрена однобайтная кодировка. (И в его дочерние окна тоже...)


 
atruhin ©   (2007-01-29 17:51) [18]

> [1] palva ©   (27.01.07 13:36)
> А что такое базовые функции? Функции Windows API, с которыми работает приложение юникода не требуют.

Может я не правильно понял, но основная масса функций работает с юникоде.
Когда то давно тестировал алгоритм поиска строки, замена AnsiUpperCase на самописную функцию,
обеспечило прирост скорости на несколько порядков!
Анализ AnsiUpperCase показал, что она работает по следующему алгоритму:
1. Вычисляет длинну строки;
2. Запрашивает блок памяти в 2 раза больше длинны строки;
3. Переводит строку в юникоде.
4. Запрашивает текущую локаль.
5. Производит преобразование юникоде строки;
6. Конвртирует в ansi
7. Освобождает выделенный буфер.
Хотя все это давно и хорошо документированно.


 
Psychedelic ©   (2007-01-29 19:45) [19]


> Я сильно извиняюсь, но CreateWindow(Ex)W подразумевает,
> что не только класс окна может быть на родном языке, но
> и параметры в сообщениях будут тоже передавать с учетом
> Unicode. То есть, в окно, созданное CreateWindow(Ex)A текст
> нельзя будет вывести на языке, для которого не предусмотрена
> однобайтная кодировка. (И в его дочерние окна тоже...)

Я также весьма энергично извиняюсь, но :)
да неужели?
Т.е. если я создам окно с CreateWindow(Ex)A, то я не смогу вывести юникод текст? Я правильно вас понял? Вы точно в этом уверены?



Страницы: 1 вся ветка

Текущий архив: 2007.02.18;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.037 c
2-1169894802
LobaS
2007-01-27 13:46
2007.02.18
Освобождение памяти


4-1159734008
vertal
2006-10-02 00:20
2007.02.18
Консоль: определение факта перенаправления stdout в файл


15-1169945476
POP
2007-01-28 03:51
2007.02.18
Shareware софт, работа с клиентурой.


15-1169650871
Ксардас
2007-01-24 18:01
2007.02.18
Объясните как это работает, а?


2-1170331990
PL
2007-02-01 15:13
2007.02.18
Функция для определения предыдущего месяца