Польский шрифт в программе (нужен ли UNICODE) ?

m52
Дата: 24.05.2011 06:47:27
Здравствуйте!

Моя программа написана на D2007. Для поиска файла на диске использую функции FindFirst, FindNext.
Но вот проблема: попался файл, в имени которого есть символ Польского алфавита, а именно,
файл с именем Ścierka_superka_small.jpg

Функция FindNext показала мне свойство SearchRec.Name = Scierka_superka_small.jpg
т.е. первая буква превратилась из польской буквы Ś в обычную латинскую S с кодом=83.

Свойство SearchRec.Name имеет обычный тип String;
Выяснил, что при присвоении строки "Ścierka_superka_small.jpg" переменной типа String
теряются символы Польского алфавита (просто превращаются в латинские буквы).

Если описать переменную st: WideString, то присвоение строки st:='Ścierka_superka_small.jpg' проходит успешно и символ st[1]='Ś'
c кодом 346, т.е. символ действительно польский!

Вопрос: Как сделать, чтобы в программе переменные типа String могли нормально присваивать строки, содержащие символы других алфавитов? Обязательно ли переходить на другую Delphi, которая поддерживает UNICODE ? Ведь русские строки работают.


В региональных настройках для ПО, не поддерживающих UNICODE, язык стоит "Русский".
Стандартная программа блокнот нормально работает с польскими буквами.
Для каких языков вообще нужен Юникод, а какие языки будет нормально работать даже если ПО не поддерживает Юникод?

Заранее спасибо!
wellwell
Дата: 24.05.2011 07:18:28
m52,

Блокнот сам по себе юникодный изначально. Решение только одно: хотите нормально работать с разными языками - используйте Delphi 2009+. Русский работает потому, что системная локаль установлена LANG_RUSSIAN. Если поменяете ее на польскую, будет работать нормально с польскими буквами, но не с русскими. Чтобы было все сразу - только Unicode.
m52
Дата: 24.05.2011 07:38:59
Delphi 2009+ - это что? Я раньше работал с Delphi 2009, когда она только вышла, но сама среда была довольно глючная.
Чем отличается Delphi 2009+ от Delphi 2009 ?
Какая версия билда Delphi 2009+ на данный момент самая свежая? Требуется ли установка отдельных сервис-паков?

Т.е, как я понял, для поддержки других языков, отличных от локали, нужен юникод?
m52
Дата: 24.05.2011 08:03:57
Delphi 2009+ - это наверное Delphi 2009 и выше? Сразу не дошло, извините.
Тогда скажите, какая версия билда Delphi 2009 на данный момент самая свежая? Требуется ли установка отдельных сервис-паков?
Anatoly Podgoretsky
Дата: 24.05.2011 08:33:28
SearchRec.Name = WideChar('Ścierka_superka_small.jpg');
В региональных настройках для ПО, не поддерживающих UNICODE, поставить "Польский".
Юникод нужен для всех языков, кроме английского.
m52
Дата: 24.05.2011 08:51:03
Anatoly,

если я в региональных настройках для ПО, не поддерживающих UNICODE, поставлю "Польский", то мне явно будет дискомфортно работать с польской локалью. Придется, видимо, своё ПО переводить на UNICODE.

Какую Delphi с поддержкой Unicode, как наиболее стабильную, посоветуете? Предполагаю, что D2009, т.к. она раньше вышла, но могу ошибаться. Подскажите.

> SearchRec.Name = WideChar('Ścierka_superka_small.jpg');
Так не пойдет, мне надо, чтобы FindNext уже вернула 'Ścierka_superka_small.jpg' в свойстве SearchRec.Name
fd00ch
Дата: 24.05.2011 08:51:32
m52
Обязательно ли переходить на другую Delphi, которая поддерживает UNICODE ?
Нет, можно дергать системные FindFirstFileW, FindNextFileW, из них получать имя файла в WideString и работать дальше. Но проще всё же перейти на современную Unicode-версию Delphi

m52
Для каких языков вообще нужен Юникод, а какие языки будет нормально работать даже если ПО не поддерживает Юникод?
В общем случае - только английский не нуждается в юникоде. Остальным языкам он необходим.
Anatoly Podgoretsky
Дата: 24.05.2011 09:02:53
m52
Anatoly,

если я в региональных настройках для ПО, не поддерживающих UNICODE, поставлю "Польский", то мне явно будет дискомфортно работать с польской локалью. Придется, видимо, своё ПО переводить на UNICODE.

Какую Delphi с поддержкой Unicode, как наиболее стабильную, посоветуете? Предполагаю, что D2009, т.к. она раньше вышла, но могу ошибаться. Подскажите.

> SearchRec.Name = WideChar('Ścierka_superka_small.jpg');
Так не пойдет, мне надо, чтобы FindNext уже вернула 'Ścierka_superka_small.jpg' в свойстве SearchRec.Name

Ты только полякам этого не говори, они столько лет работают с польской локалью, а оказывается это неправильно.
FindNext -> FindNextFileW
D2009 самая глюкавая.
m52
Дата: 24.05.2011 15:48:31
А какую Delphi с поддержкой UNICODE лучше использовать?
Если D2009 - самая глючная, то какая лучше, RAD Studio 2010 или RAD Studio XE (2011) ?
И чем лучше, вкратце поясните.
Esperito
Дата: 24.05.2011 16:59:53
Delphi XE. Начиная с 2009 больших фич не добавлялось, зато правились баги.