Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];

Вниз

Юникод в базовых функциях 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.04 c
2-1170240363
<X>
2007-01-31 13:46
2007.02.18
Ошибка при созданнии файла


1-1167111780
Layner
2006-12-26 08:43
2007.02.18
Как отловить перемещение DBGrid по горизонтальной прокуртке?


6-1158079549
AndrewSt
2006-09-12 20:45
2007.02.18
Два интернет соединения??


2-1170330701
Alek_1
2007-02-01 14:51
2007.02.18
вывести дату...


10-1129708059
SupKlo
2005-10-19 11:47
2007.02.18
Как передать картинку с клиента на сервер через DCOM





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский