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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.003 c
1-1291689448
P
2010-12-07 05:37
2012.04.15
Высота итема ListView


2-1324499887
Антоха_М
2011-12-22 00:38
2012.04.15
Как видоизменить StringGrid?


2-1324444743
petvv
2011-12-21 09:19
2012.04.15
Непонятки с запросом


15-1323674715
OW
2011-12-12 11:25
2012.04.15
Анимация в игре. Как лучше управляние многими объектами.


6-1254940473
__Алексей__
2009-10-07 22:34
2012.04.15
Глупый вопрос про подсчет трафика и GetIfTable





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский