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

Вниз

юникод   Найти похожие ветки 

 
Gu   (2011-12-20 22:51) [0]

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

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

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

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


 
RWolf ©   (2011-12-21 10:10) [1]

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


 
RWolf ©   (2011-12-21 10:11) [2]

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


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


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


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

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


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

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


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

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

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


 
Dimka Maslov ©   (2011-12-21 16:02) [6]

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


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

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


 
DVM ©   (2011-12-23 11:40) [8]


> Gu   (23.12.11 11:21) [7]

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


 
DVM ©   (2011-12-23 11:42) [9]


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

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


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

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

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

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

инче если

s:string

далее

s:=My2;

далее

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

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

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


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


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


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


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


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


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


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


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


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

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


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

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



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

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

Наверх




Память: 0.5 MB
Время: 0.008 c
15-1323592147
alexdn
2011-12-11 12:29
2012.04.15
Ява скрипт


1-1291528318
Дмитрий С
2010-12-05 08:51
2012.04.15
ObjComAuto.TObjectDispatch и методы с 3+ вариант-аргументами.


15-1323693258
stas
2011-12-12 16:34
2012.04.15
подключение через VPN


1-1291676222
Gu
2010-12-07 01:57
2012.04.15
Заглавное меню


15-1322938665
Anton Nagornyi
2011-12-03 22:57
2012.04.15
Нужен помощник довести проект до конца