![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
юникод
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 должны быть?