Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

юникод


Gu ©   (2011-12-20 22:51:00) 

есть модуль с текстовыми константами, например

Const
My1='mama';
My2='mama мыла раму';

по умолчанию формат сохранения модулей (*.pas) = ansi, если изменить на юникод, то константы My1 и 2 в какой кодировке будут с точки зрения компилятора?

если вывожу их как showmessage(My2) то получаю кракозябры, если в региональных настройках системы выставлен не русский и компиляция была в режиме сохранения модуля как ansi. Если как юникод сохранено и скомпилено - то показывает норм, но тогда при текстовых операциях вида My2[x] и Length(My2) возникают проблемы.
Как сделать чтобы везде одинаково все было?
И на что влияет выбор языка в опциях проекта (Language ID в Version Info)


Gu   (2011-12-23 16:43:00) [1]

Об этом не думал. Вырубает, посплю потом )
DVM - спасибо, один вы мой луч тут :)


DVM   (2011-12-23 13:37:00) [2]


> Ega23 ©   (23.12.11 13:36) [12]


> А ты попробуй сериализовать в стрим.

А сериализовать поможет TWriter и о Length(s) * SizeOf(Char) можно забыть.


Ega23   (2011-12-23 13:36:00) [3]


> При текстовых операциях вида My2[x] и Length(My2) проблем
> не возникало (независимо от кодировки). Что я не правильно
> делаю?


А ты попробуй сериализовать в стрим. Length - зашибись, но при сериализации потребуется Length(s) * SizeOf(Char)


Dimka Maslov   (2011-12-23 11:59:00) [4]


> ord(s[x]) на русских выдавало > 255


В юникоде русские буквы имеют коды $410..$44F, правильно выдавало.


Gu   (2011-12-23 11:50:00) [5]

нет, есть проблемы при операциях с номерами символов и строки.

пока вопрос решил так

Const
My1=ansistrung('mama');
My2=ansistrung('mama мыла раму');

инче если

s:string

далее

s:=My2;

далее

ord(s[x]) на русских выдавало > 255

вообщем для решения

1. конст срзу типизировать
2. модуль с русс буквами в юникод


DVM   (2011-12-23 11:42:00) [6]


> но тогда при текстовых операциях вида My2[x] и Length(My2)
> возникают проблемы.

независимо от того, Unicode или Ansi никаких проблем тут не должно быть.


DVM   (2011-12-23 11:40:00) [7]


> Gu   (23.12.11 11:21) [7]

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


Gu   (2011-12-23 11:21:00) [8]

это всем известно. вопрос не в этом.


Dimka Maslov   (2011-12-21 16:02:00) [9]

тестирование показывает, что для юникода вообще не нужны языковые настройки.


Gu   (2011-12-21 15:03:00) [10]

>> 3. LanguageID в Version Info влияет только на отображение свойств файла в проводнике

вот тестирование другое показывает: это значение влияет на отображение таких констант через showmessage если Id не совпадает с интерфейсом винды (выбран английский интерфейс) при выбраном не русском варианте установок для юникода (выбран английский для юникода). короче вот если с этими двумя значениями поиграться (всего 4 варианта с перезагрузками системы), то модуль откомпилированый с английским ID , будет уступать на 1 вариант правильного отображения русских букв (тестировал на Win7x64Ent).


Медвежонок Пятачок   (2011-12-21 12:41:00) [11]

а не пофик ли если стоковый литерал это как бы и не юникод и не анси?
а он то, как объявлен идентификатор которому присвоен литерал.


Dimka Maslov   (2011-12-21 12:34:00) [12]


> в нынешних дельфях исходники разве не в UTF-8 должны быть?


По умолчанию - ansi. И только когда появляются символы из других кодировок, предлагается сохранение в utf-8. То же самое и в студии.

По сути вопроса:
1. Для такого рода строковых констант я всегда пользуюсь resourcestring
2. При текстовых операциях вида My2[x] и Length(My2) проблем не возникало (независимо от кодировки). Что я не правильно делаю?
3. LanguageID в Version Info влияет только на отображение свойств файла в проводнике, а также если правильно работающий инсталлятор обнаружит в системе модуль с другим языком, он обязан будет предупредить. На работу программы это не влияет.


RWolf   (2011-12-21 10:11:00) [13]

хотя нет, проверил — ansi работает.


RWolf   (2011-12-21 10:10:00) [14]

в нынешних дельфях исходники разве не в UTF-8 должны быть?


Наверх

Титульная страница Поиск, карта сайта Написать письмо