Текущий архив: 2004.09.19;
Скачать: CL | DM;
Вниз
Проблеммы с кодировкой Найти похожие ветки
← →
Ertong © (2004-08-24 20:40) [0]Вот поставил себе английский XP(раньше был русский). Теперь в почти всех моих формах вместо нормально русского текста на кнопках я вижу знаки вопроса. В одном журнале читал, что это решается изменением в реестре нескольких ключей. Это сработало. Но как будет работать моя программа у других пользователей. Я ж не могу править реестр в программе, т.к. может не быть администраторских прав. И потом, другие программы работают нормально без исправления. Как избежать таких неприятностей?
P.S. Исходники DMClient"a владеют такими же проблемами. Но скачаный бинарник пашет без проблем.
← →
YurikGL © (2004-08-24 20:46) [1]Локализовывать или ставить MUIpack
← →
Ertong © (2004-08-24 21:25) [2]
> Локализовывать или ставить MUIpack
Но ведь другие программы пашут, я тоже хочу :)
← →
YurikGL © (2004-08-24 21:45) [3]Попробуй пользовать разные шрифты, потом настроек шрифтов дофигища.
← →
Ertong © (2004-08-24 22:04) [4]Пробовал.
Это не то :(
Заголовки окон - системные шрифты. А в них тоже баги.
← →
Piter © (2004-08-24 23:16) [5]Ertong © (24.08.04 20:40)
попробуй моего клиента - http://www.piter.pechora.org
Я там кое чего делал, по идее какая бы винда не была (если она win"2000 и выше), большинство текста должно отображаться по русски. Я не переделал только подсказки и заголовки окон.
Ertong © (24.08.04 20:40)
Но скачаный бинарник пашет без проблем
а-а-а. Так в DMClient все нормально отображается? Тогда проще, просто выставляй у своих контролов font.charset русский, вот и все...
← →
Ertong © (2004-08-25 01:22) [6]
> а-а-а.
Вот тут то и пироги. Скачаный ехешник нормально пашет. А если скачать сырцы и откомпилить то одни "вопросы". Почему?
> Я там кое чего делал
Если не секрет, то что именно?
← →
Piter © (2004-08-25 01:34) [7]Ertong © (25.08.04 1:22) [6]
А если скачать сырцы и откомпилить то одни "вопросы". Почему?
ну не знаю. В D7 пофигу где компилить, наверное особенности IDE D6... или какой ты там используешь...
← →
Piter © (2004-08-25 01:34) [8]Ertong © (25.08.04 1:22) [6]
Если не секрет, то что именно?
ну я так не помню... VCL правил, в общем
← →
Германн © (2004-08-25 03:58) [9]2 Ertong © (24.08.04 20:40)
Если не о чем не заботиться, то в настройках всех шрифтов указана кодировка "DEFAULT_CHARSET". Ответь, пожалуйста, на вопрос - какой шрифт является "основным" в русской версии окон, а какой в английской?!
Теперь вопрос: А что ты хочешь?
← →
nikkie © (2004-08-25 13:51) [10]>Исходники DMClient"a владеют такими же проблемами. Но скачаный бинарник пашет без проблем.
оч интересно. а чем ты компилируешь?
← →
wicked © (2004-08-25 13:59) [11]
> В одном журнале читал, что это решается изменением в реестре
> нескольких ключей. Это сработало.
хых, любители реестр править... это решается через
Control Panel - Regional and Language Options - Advanced - Language for non-Unicode programs... выставляется нужный язык и вуаля... :)
кстати, возможно, что это и есть ответом на [9]...
← →
Piter © (2004-08-25 14:07) [12]wicked © (25.08.04 13:59) [11]
хых, любители реестр править... это решается через
Control Panel - Regional and Language Options - Advanced - Language for non-Unicode programs
но есть и другие случа. Человек, например, работает в Германии :) И у него там стоит немецкий. А при этом он еще и исользует русские программы...
← →
Sergey Kaminski © (2004-08-25 14:30) [13]Всякий раз вижу подобные вопросы и недоумеваю. Откуда у людей столько проблем?
Я начинал программировать во времена ДОС (Borland Pascal, Turbo Pascal). После этого вместе со всеми перешел на Win 3.1., писал сначала на VB, после на Turbo Pascal for Win, также BC++.
Потом пошло-поехало. Win95, 98 (и русская и англ), NT 4 (то же самое). Сейчас основные машины, на которых происходит компиляция - Win2k & XP - английские, без МУИ всяких. Все программы, поступавшие в обиход имели русский интерфейс. Запускались на всевозможных машинах.
И Я НИ РАЗУ не имел сабжевых проблем. Ни разу не занисался извращением и не правил RTL. и т.п.
Нет, имел один раз и недавно. Одно диалоговое окно на машине с _РУССКИМ_ ХР показало кракозябры. Посмотрел в исходник - да, моя криворукость виновата. Случайно поменял CharSet на HEBREW_CHARSET или что-то в этом роде. Исправил. ВСЕ.
ЭТО НЕ ПРОБЛЕМА ПРОГРАММИСТА: на таргет-машине ДОЛЖНА быть нормально настроена русская локаль, ДОЛЖНЫ быть нормальные русские шрифты, если они хотят запускать русские программы. Пусть это хоть финская версия винды. ВСЕ.
← →
wicked © (2004-08-25 14:33) [14]
> но есть и другие случа. Человек, например, работает в Германии
> :) И у него там стоит немецкий. А при этом он еще и исользует
> русские программы...
и если он в Control Panel исправит язык на русский, то немецкие программы кракозябрами поплывут?... ну максимум что будет - пару умляутов не увидит...
а вообще то это касается только не-юникодовских программ... с остальными всё ок...
← →
wnew © (2004-08-25 14:33) [15]Sergey Kaminski © (25.08.04 14:30) [13]
100% верно!
← →
Sergey Kaminski © (2004-08-25 14:35) [16]И вообще, откуда сейчас-то проблемы берутся, когда винды юникодовые пошли? Это для меня загадка вроде той, почему человек, начинающий программировать, в первую очередь хочет "круглые кнопки" и в трей запуздыривать...
← →
wnew © (2004-08-25 14:36) [17]wicked © (25.08.04 14:33) [14]
> ну максимум что будет - пару умляутов не увидит
Умляуты будут заменены русскими символами. В том числе, иногда, и в файловой системе. А это уже, согласитесь, - чревато.
← →
Sewix (2004-08-25 14:42) [18]Надо было при установки XP выбрать подтержку русского языка. Там где языки и стандарты(не помню как по английски). У меня уже год английсая xp все программы корректно отображают русский текст.
← →
wnew © (2004-08-25 14:48) [19]Sergey Kaminski © (25.08.04 14:35) [16]
Винды то юникодовые, но к сожалению, сама Delphi не поддерживает Unicode, хотя есть выход - TntControl компоненты. Правда сохраняется некоторые неудобства: если в среде Delphi создавать русскоязычные приложения под не руссколокализованным Windows - в редакторе кода не возможно писать на русском. В этом случае приходится извращаться - печатать в каком-нибудь другом редакторе и потом копировать в дельфийский, после чего там будет отображено кракозябрами, но при запуске приложения - всё Ок, если конечно использовались компоненты, поддерживающие Unicode. Хотя, к примеру, родные делфийские TMemo, TBitBtn, TEdit и, наверное, ещё некоторые могут корректно отображать кириллицу. А вот TRichEdit, хотя и имеет общего предка с TMemo - никак не желает работать с кириллицей.
← →
wicked © (2004-08-25 15:29) [20]> wnew © (25.08.04 14:36) [17]
> Умляуты будут заменены русскими символами. В том числе,
> иногда, и в файловой системе.
хм... специально вчера ставил опыт (звонил знакомый - точно такая же проблема):
1. создал в фаре (он не юникодовый) файл с кирилическим названием...
2. поменял локаль на английскую...
3. поглядел в фаре на название - оно отобразилось знаками вопроса (русские надписи в фаре - кракозябрами, как и ожидалось) и файл при этом не открывался... в експлорере, напротив, всё было как и надо - кириллическое имя файла...
4. поменял локаль на русскую - всё вернулось на свои места...
отсюда напрашивается вывод, что имена фалов в юникодовых системах (win2k, winXP) хранятся в юникоде, даже если они были созданы не-юникодовыми программами...
или я где-то неправ?...
← →
wicked © (2004-08-25 15:48) [21]тест невидимых сообщений - можно удалить...
← →
GrayFace © (2004-08-25 15:48) [22]Sergey Kaminski © (25.08.04 14:30) [13]
После этого вместе со всеми перешел на Win 3.1.,
Sergey Kaminski © (25.08.04 14:30) [13]
И вообще, ошибки программ - НЕ ПРОБЛЕМА ПРОГРАММИСТА: на таргет-машине ДОЛЖНЫ быть установлены всякие дебаггеры и дизасемблеры, если они хотят запускать хоть какие-то программы.
Sergey Kaminski © (25.08.04 14:35) [16]
И вообще, откуда сейчас-то проблемы берутся, когда винды юникодовые пошли?
А проги остались АНСИшными.
Это для меня загадка вроде той, почему человек, начинающий программировать, в первую очередь хочет "круглые кнопки" и в трей запуздыривать...
Стремление к прекрасному :)
wicked © (25.08.04 15:29) [20]
> или я где-то неправ?...
Ты не прав в [15].
← →
Sergey Kaminski © (2004-08-25 15:56) [23]GrayFace © (25.08.04 15:48) [22]
Если китаец хочет, чтобы его китайская программа работала на твоей машине, он вправе расчитывать на то, что у тебя как-минимум установлены китайские шрифты. И нормально настроена система а не "реестр править".
Стремление к прекрасному :)
У всех свое представление о прекрасном. В мои представления о прекрасном, например, "круглые кнопки" не входят.
← →
Piter © (2004-08-25 16:15) [24]Sergey Kaminski © (25.08.04 14:35) [16]
И вообще, откуда сейчас-то проблемы берутся, когда винды юникодовые пошли?
а неужели непонятно? Если программа уникод не поддерживает - какая разница поддерживает ли его система? Ты что, хочешь сказать, что пишешь на дельфи и всегда используешь unicode? Вот отсюда блин и проблемы. Это очевидно.
Да и VCL Unicode не поддерживает.
← →
Piter © (2004-08-25 16:18) [25]wicked © (25.08.04 15:29) [20]
отсюда напрашивается вывод, что имена фалов в юникодовых системах (win2k, winXP) хранятся в юникоде, даже если они были созданы не-юникодовыми программами
а вот это интересный вопрос...
Sergey Kaminski © (25.08.04 15:56) [23]
он вправе расчитывать на то, что у тебя как-минимум установлены китайские шрифты
конечно. Но он не вправе требовать, чтобы у него локаль была установлена как тебе хочется. В идеале программа вообще должна запускаться корректно на какой хочешь системе (unicode"овой).
← →
Sergey Kaminski © (2004-08-25 16:21) [26]
Piter © (25.08.04 16:15) [24]
Замечу, что с появлением юникодовых Windows, НИКТО не отменял в них поддержку не юникодовых программ.
← →
Sergey Kaminski © (2004-08-25 16:23) [27]
В идеале программа вообще должна запускаться корректно на какой хочешь системе
Не поверишь, так оно и есть.
← →
wnew © (2004-08-25 16:41) [28]wicked © (25.08.04 15:29) [20]
> отсюда напрашивается вывод, что имена фалов в
> юникодовых системах (win2k, winXP) хранятся в юникоде,
> даже если они были созданы не-юникодовыми
>программами...
> или я где-то неправ?...
Да, где-то не прав. Всё дело в том, что проводник в Win9x и тем более в новых Windows может отображать имена файлов обозванных по русски совершенно корректно. Но! Попробуй, используя TTreeView и TListView, вывести корректно дерево файлов в этих компонентах, разумеется, на не русском Windows (имею в виду региональные настройки). Даже, если исползовать COM интерфейс и информацию о файловой системе вытягивать прямо из именного файлового пространства Windows - ничего кроме знаков вопрса не получишь. А вот, если использовать TntControl компоненты - то всё в полном ажуре.
← →
GrayFace © (2004-08-25 17:53) [29]>Sergey Kaminski © (25.08.04 14:30) [13]
> После этого вместе со всеми перешел на Win 3.1.,
Это я хотел сказать, что далеко не все переходили на Win3.1
← →
GrayFace © (2004-08-25 18:00) [30]Sergey Kaminski © (25.08.04 15:56) [23]
> У всех свое представление о прекрасном. В мои
> представления о прекрасном, например, "круглые кнопки" не входят.
В мое тоже, но неXPшные кнопки уж не в какое прекрасное и подавно не лезут.
Sergey Kaminski © (25.08.04 16:21) [26]
Замечу, что с появлением юникодовых Windows, НИКТО не отменял в них поддержку не юникодовых программ.
Отменяли. Чтобы в уникодовских виндах скопировать что-то русское в буфер обмена надо переключать раскладку клавы.
← →
Piter © (2004-08-25 18:00) [31]Sergey Kaminski © (25.08.04 16:21) [26]
Замечу, что с появлением юникодовых Windows, НИКТО не отменял в них поддержку не юникодовых программ
и что? Слушай, я не понимаю о чем мы говорим. Так о чем все таки? Что ты хочешь сказать. Я хочу сказать простую вещь - что если у тебя программа русская, а у человека немецкая локаль - то будут пробелемы. Ты с этим споришь?
wnew © (25.08.04 16:41) [28]
Да, где-то не прав. Всё дело в том, что проводник в Win9x и тем более
странный ты человек. Говоришь, что не прав и далее таки подтверждаешь свою правоту...
Попробуй, используя TTreeView и TListView
так эти компоненты тоже ANSI"шные! А что ты хотел?! Выстави им Font правильный.
А вот, если использовать TntControl компоненты - то всё в полном ажуре
Вот именно! А ПОЧЕМУ? Не из-за этого ли:
отсюда напрашивается вывод, что имена фалов в юникодовых системах (win2k, winXP) хранятся в юникоде, даже если они были созданы не-юникодовыми программами
Если из-за этого - то странно однако! Хотя еще вот какое предположение - может, это в NTFS встроен Unicode? ты попробуй тоже самое на FAT... хотя нет, на фат тоже самое будет.
Вот и вопрос - что, в FAT предусмотрено два байта на буквы имени?
← →
wnew © (2004-08-25 18:12) [32]Piter © (25.08.04 18:00) [31]
:)) Перечитай пост 28, а потом иди отдыхать:)
← →
Sergey Kaminski © (2004-08-25 18:18) [33]
Я хочу сказать простую вещь - что если у тебя программа русская, а у человека немецкая локаль - то будут пробелемы. Ты с этим споришь?
Я спорю, с тем, что есть такая проблема. НЕТ такой проблемы. Как нет проблемы: воровать ли серябряные ложки в гостях или не воровать.
Если программа русская, а у человека немецкая локаль, то это проблема НЕ программиста. Может у того человека вообще нет Windows или он вообще не умеет компьютером пользоваться, в т.ч. настроить систему. Как нет проблемы программиста баз данных в том, что у человека на "той" машине может не стоять BDE.
← →
Sergey Kaminski © (2004-08-25 18:20) [34]Нет проблемы китайского программиста в том, что у тебя иероглифы не показываются. Поставь шрифты, настрой локаль и все претензии к китайцу исчезнут.
← →
Sergey Kaminski © (2004-08-25 18:21) [35]>> GrayFace © (25.08.04 17:53) [29]
>> Это я хотел сказать, что далеко не все переходили на Win3.1
Простите великодушно
← →
Piter © (2004-08-25 18:25) [36]wnew © (25.08.04 18:12) [32]
:)) Перечитай пост 28, а потом иди отдыхать:)
я этот пост читал, между прочим. Я еще на него и ответил. Теперь ответь ты, что не так?
Единственное, что я ник перепутал :)
Sergey Kaminski © (25.08.04 18:18) [33]
Если программа русская, а у человека немецкая локаль, то это проблема НЕ программиста
хорошо. Значит, это проблема пользователя? Ок.
А теперь если ты такой умный - ответь. Если нужно использовать английские программы (это понятно), немецкие и при этом еще и русские - что делать?! Хочешь сказать такого не бывает? Спроси у wnew - он тебе расскажет.
Ты хоть сам то понимаешь для ЧЕГО делался Unicode, а?
Sergey Kaminski © (25.08.04 18:20) [34]
Поставь шрифты, настрой локаль
ты совсем что ли? Причем здесь Unicode и локаль? Объясни плиз как сочетается Unicode и локаль? Unicode РАЗРАБАТЫВАЛСЯ для того, чтобы не зависеть от локали. Думай, прежде чем говоришь.
← →
wnew © (2004-08-25 18:28) [37]Sergey Kaminski © (25.08.04 18:20) [34]
Такой подход не всегда оправдан. Первый же пример - интернет-браузер. А если требуется создать HTML-редактор, который предполагается использовать в Германии, но способным создавать русскоязычные странички? А различные переводчики? Ну и т.д. Да и вообще, коли придумали Unicode - лучше его использовать, тем более, думаю, что для разработчиков, особенно шароварщиков - это только прибавит выгоды. К примеру, здесь в Германии, не малое колличество людей с удовольствием пользовались бы русскими программами, но естественно у всех установлен немецкий Windows, а делать русскую локализацию - означает создавать те же проблеммы для немецких программ.
← →
Piter © (2004-08-25 18:35) [38]Да он вообще противоречит самому себе:
Sergey Kaminski © (25.08.04 16:23) [27]
В идеале программа вообще должна запускаться корректно на какой хочешь системе
Не поверишь, так оно и есть.
и потом:
Нет проблемы китайского программиста в том, что у тебя иероглифы не показываются. Поставь шрифты, настрой локаль и все претензии к китайцу исчезнут.
← →
Piter © (2004-08-25 18:37) [39]Sergey Kaminski © (25.08.04 14:35) [16]
И вообще, откуда сейчас-то проблемы берутся, когда винды юникодовые пошли?
То есть, с одной стороны человек говорит, что Unicode как раз спасает от проблем, нет нужды настраивать локаль. А с другой он потом тут же утверждает, что локаль должна быть настроена "правильно".
ну так если локаль настроена "правильно" - нафига тогда Unicode вообще?
← →
Sergey Kaminski © (2004-08-25 18:43) [40]
ты совсем что ли? Причем здесь Unicode и локаль? Объясни плиз как сочетается Unicode и локаль? Unicode РАЗРАБАТЫВАЛСЯ для того, чтобы не зависеть от локали.
Молодец, разъяснил мне, непутевому, для чего юникод придумали.
>>wnew © (25.08.04 18:28) [37]
Ваши примеры как раз из той области, когда приложение именно и должно использовать юникод, с чем я и не спорил.
А вотвместо нормально русского текста на кнопках я вижу знаки вопроса
это несколько другое, имхо.
← →
Sergey Kaminski © (2004-08-25 19:05) [41]2 Piter
Может, я слишком сложно изъясняюсь. Попытаюсь попроще:
Если приложение должно быть интернациональным, нужно использовать юникод или иные средства, именно для этого предназначенные. А не плакать на то, что на немецкой локали русские символы в не-юникодовой программе с умляутами. И не думать,что это есть проблема, которая "решается" правкой реестра или другим шаманством.
При таком подходе - нет и не может быть никакой проблемы.
← →
Anatoly Podgoretsky © (2004-08-25 19:14) [42]Пример офис, IE, OE и другие продукты микрософта, в Дельфи из встроеных, пожалуй только RichEdit (в режиме сохранения RTF) нормально работает, даже на не Юникод Виндоус, но это заслуга Микрософт, а не Борланд.
← →
Ertong © (2004-08-25 20:37) [43]
> [7] Piter © (25.08.04 01:34)
> [10] nikkie © (25.08.04 13:51)
D7
> хых, любители реестр править... это решается через
> Control Panel - Regional and Language Options - Advanced
> - Language for non-Unicode programs... выставляется нужный
> язык и вуаля... :)
Нет :) Это не помогло!
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet003\Control\Nls\CodePage
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Nls\CodePage
1250 - с_1251.nls
1252 - с_1251.nlsprocedure TForm1.Button1Click(Sender: TObject);
- пашет, если язык для не юникод программ русский
const str:String="Заголовок";
begin
Caption:=str;
end;procedure TForm1.Button1Click(Sender: TObject);
- Не пашет
const str:WideString="Заголовок";
begin
Caption:=str;
end;procedure TForm1.Button1Click(Sender: TObject);
- Пашет
const str:WideString="Заголовок";
begin
SetWindowTextW(handle,PWideChar(str));
end;
Но для лайбела последним методом не сделаеш.:(
← →
wnew © (2004-08-25 21:05) [44]Ertong © (25.08.04 20:37) [43]
>procedure TForm1.Button1Click(Sender: TObject);
>const str:String="Заголовок";
>begin
> Caption:=str;
>end; - пашет, если язык для не юникод программ русский
>
>procedure TForm1.Button1Click(Sender: TObject);
>const str:WideString="Заголовок";
>begin
> Caption:=str;
> end; - Не пашет
Эти два примера и не могут нормально функционировать, т.к. свойство Caption ожидает значение типа string. В данном случае не имеет значение то, что во втором примере объявлена константа типа WideString, при присвоении Caption всё-равно имеет тип AnsiString.
А вот с третим примером всё в полном порядке.
Если вдруг мне попадётся программа, которая, не спрашивая, правит реестр в моей системе, в плане системных установок - выкину эту прогу и постараюсь запомнить автора, что бы больше не использовать его программ.
← →
Ertong © (2004-08-25 21:16) [45]
> Эти два примера и не могут нормально функционировать, т.к.
> свойство Caption ожидает значение типа string. В данном
> случае не имеет значение то, что во втором примере объявлена
> константа типа WideString, при присвоении Caption всё-равно
> имеет тип AnsiString.
Второй проимер - согласен. Но все таки Дельфи сам вызывает WideCharToMultiByte :)
А первый пример, помойму нормальный.
Интересно то, что в Windows.pas. Все функции обьявлены как Ansi, т.е. нпример SetWindowText -> SetWindowTextА.
← →
wnew © (2004-08-25 21:52) [46]Ertong © (25.08.04 21:16) [45]
Первый пример, конечно, нормальный, но для русской локализации.
А где это Delphi сама вызывает WideCharToMultiByte?
По моему функции Delphi WideCharLenToStrVar, ну и через неё: WideCharToString, WideCharLenToString, WideCharToStrVar вызывают функцию API WideCharToMultiByte и всё, больше нигде эта функция не вызывается.
Так вот, при попытке чтения Unicode текстового файла, используя функцию WideCharToString для вывода в TMemo (в не русском Windows), ничего хорошего кроме вопросительных знаков вместо русского текста не получается.
В функции WideCharLenToStrVar модуля System функции WideCharToMultiByte(0, 0, Source, SourceLen, nil, 0, nil, nil) первым параметром передаётся 0, но если вместо ноля передать 1251 - то TMemo в этом случае корректно отображает кириллицу. К сожалению с TRichEdit этот фокус не проходит.
Да, модули VCL править последнее дело. Лучше скопировать эти функции в свой проект и там переделать.
← →
nikkie © (2004-08-25 21:59) [47]>[43] Ertong
>D7
ну вот и объяснение. бинарник компилировался на D6+upd2. насколько я помню, эти проблемы с D7 и заставили Piter-a править VCL.
>wnew
Эти два примера и не могут нормально функционировать, т.к. свойство Caption ожидает значение типа string. В данном случае не имеет значение то, что во втором примере объявлена константа типа WideString, при присвоении Caption всё-равно имеет тип AnsiString.
я думаю, все-таки может работать нормально, пусть и не в твоей ситуации, SetThreadLocale должна помочь.
между String и WideString тоже есть разница. попробуй использовать в тексте программы 2 константы - String и WideString, и попробуй после компиляции найти эти константы в exe. String лежит as is, WideString - в виде unicode. преобразование второй константы из ascii в unicode произвел компилятор. получается, что играет роль под какой локалью компилировалась программа.
>А вот с третим примером всё в полном порядке.
да где же все в порядке? на Win9x такая программа и не запустится.
← →
nikkie © (2004-08-25 22:01) [48]>А где это Delphi сама вызывает WideCharToMultiByte?
system.pas CharFromWChar
а она вызывается из _LStrFromPWCharLen
← →
Piter © (2004-08-25 22:09) [49]Ertong © (25.08.04 21:16) [45]
Интересно то, что в Windows.pas. Все функции обьявлены как Ansi, т.е. нпример SetWindowText -> SetWindowTextА.
что значит все? Функция SetWindowTextW не объявлена что ли?
Sergey Kaminski © (25.08.04 19:05) [41]
При таком подходе - нет и не может быть никакой проблемы
а почему же ты говоришь о том, что если хочешь чтобы китайская программа работала - то ты обязан выставить китайскую консоль?!
← →
Piter © (2004-08-25 22:10) [50]nikkie © (25.08.04 21:59) [47]
я думаю, все-таки может работать нормально, пусть и не в твоей ситуации, SetThreadLocale должна помочь
нет
← →
Piter © (2004-08-25 22:11) [51]SetThreadlLocale мало чем помогает...
← →
Ertong © (2004-08-25 22:24) [52]I>
> что значит все? Функция SetWindowTextW не объявлена что
> ли?
Обявлена, но SetWindowText, намертво ссылается на Ansi версию. Логично было бы делать это через директиви компилятора.
← →
Piter © (2004-08-25 22:26) [53]Логично по твоему? Ну вот изменил ты директиву и VCL уже никогда не скомпилируется. Кому это надо? Главное - зачем?
← →
Ertong © (2004-08-25 22:30) [54]В идеале VCL должна полностью поддерживать юникод :) Но это только в идеале :(
← →
wnew © (2004-08-25 22:40) [55]Ertong © (25.08.04 22:30) [54]
Ну посети эту страничку и, возможно, обретёшь счастье:) К примеру, я уже счастлив:)
← →
Ertong © (2004-08-25 22:55) [56]
> эту страничку
Какую страничку :)
← →
Ertong © (2004-08-25 22:58) [57]
> между String и WideString тоже есть разница. попробуй использовать
> в тексте программы 2 константы - String и WideString, и
> попробуй после компиляции найти эти константы в exe. String
> лежит as is, WideString - в виде unicode. преобразование
> второй константы из ascii в unicode произвел компилятор.
> получается, что играет роль под какой локалью компилировалась
> программа.
Компилятор перевел отлично
← →
wnew © (2004-08-25 23:02) [58]Ertong © (25.08.04 22:55) [56]
А забыл ссылку дать:) Но я ранее её уже давал:)
http://tnt.ccci.org/
← →
Ertong © (2004-08-25 23:09) [59]
> http://tnt.ccci.org/
Качаю, щас посмотрю.
← →
Piter © (2004-08-25 23:52) [60]Ertong © (25.08.04 22:30) [54]
В идеале VCL должна полностью поддерживать юникод :) Но это только в идеале :(
в смысле, в идеале? Она могла бы поддерживать unicode, но не поддерживает :(
← →
nikkie © (2004-08-26 00:29) [61]>Ertong
>Компилятор перевел отлично
либо ты не понял того, что я написал, либо неправильно проверял.
имеем Russian локаль как дефолт. компилируем такую программу:program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils, Windows;
const
S1: String = "РУССКИЙ";
S2: WideString = "НЕМЕЦКИЙ";
begin
Writeln(Integer(S1[1]));
Writeln(Integer(S2[1]));
MessageBox(0, PChar(S1), nil, MB_OK);
MessageBoxW(0, PWideChar(S2), nil, MB_OK);
end.
запускаем. на выходе имеем:
208
1053
+ читаемый текст в обоих MessageBox.
идем в Regional Settings и ставим Afrikaans как дефолтную локаль. перегружаемся.
запускаем ОТКОМПИЛИРОВАННУЮ программу. на выходе имеем:
208
1053
+ НЕчитаемый текст в первом MessageBox и читаемый во втором.
удаляем exe и компилируем. запускаем. на выходе имеем:
208
205
+ НЕчитаемый текст в обоих MessageBox.
идем в Regional Settings и ставим Russian как дефолтную локаль. перегружаемся.
запускаем ОТКОМПИЛИРОВАННУЮ программу. на выходе имеем:
208
205
+ читаемый текст в первом MessageBox и НЕчитаемый во втором.
думаем.
← →
GrayFace © (2004-08-26 12:58) [62]Sergey Kaminski
Если вы расчитываете на использование вашей программы нерусскими, знающими русский язык, то вы обязаны менять Charset. А поскольку это очень просто, отказываться от это глупо. А, вообще, это проблема, прежде всего Delphi с AnsiVCL и DEFAULT_CHARSET"ом по умолчанию.
Ertong © (25.08.04 20:37) [43]
Но для лайбела последним методом не сделаеш.:(
У лейбла в свойстве Font есть Charset.
← →
Nero (2004-08-28 13:00) [63]А нехер себе win ХэРэ ставить! Лучше грузани старую добрую 98
Страницы: 1 2 вся ветка
Текущий архив: 2004.09.19;
Скачать: CL | DM;
Память: 0.67 MB
Время: 0.032 c