FreePascal + консольное приложение + русские аргументы /+++/

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

FreePascal + консольное приложение + русские аргументы /+++/

Сообщение SilverShadow » 10.03.2010 18:41:02

Создаю свою простенькую консольную программу для обработки файлов. При получении аргументов через ParamCount()/ParamStr() русские буквы корёжутся в кодировку windows, хотя я об этом совсем не прошу. И даже если я делаю процедуру обратного преобразования(sic!), всё равно не открываются файлы с русскими именами через assign/reset(rewrite). Что я неправильно делаю?
/+++/ А также обидели русские буквы в функциях AnsiUpperCase/AnsiLowerCase. Не говоря уже о том, что букву Ё(ё) за букву-то совсем не считают, в ['А'..'Я'](['а'..'я']) её нет! :evil:
SilverShadow
новенький
 
Сообщения: 22
Зарегистрирован: 10.03.2010 17:48:59

Re: FreePascal + консольное приложение + русские аргументы /+++/

Сообщение Mr.Smart » 10.03.2010 18:54:36

При получении аргументов через ParamCount()/ParamStr() русские буквы корёжутся в кодировку windows, хотя я об этом совсем не прошу.

Free Pascal здесь не причём. Он берёт символы именно в той кодировке в которой передаёт их система.
И даже если я делаю процедуру обратного преобразования(sic!), всё равно не открываются файлы с русскими именами через assign/reset(rewrite)

Мало информации.
то букву Ё(ё) за букву-то совсем не считают, в ['А'..'Я'](['а'..'я']) её нет!

Как известно, что ANSI код символа Ё = 0xA8, а ё = 0xB8. Указанный вами диапазон просто не пересекает эти кода т.к. код А = 0xC0. Если вы хотите учесть в множестве коды этих букв пишите так:
Код: Выделить всё
['Ё','ё','А'..'Я','а'..'я']

и FreePascal здесь вообще не причём :wink:
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: FreePascal + консольное приложение + русские аргументы /+++/

Сообщение SilverShadow » 10.03.2010 19:15:36

Код: Выделить всё
program test;
var
i:integer;
begin
for i:=1 to paramcount() do writeln(paramstr(i));
end.

В BorlandPascal попытка вызвать test.exe раз два три выдаёт:
раз
два
три
а в FreePascal -
Ёрч
фтр
ЄЁш
Всё на одной и той же машине. Винда по-разному передаёт параметры в досовское и консольное окно?
А если в программе написать
Код: Выделить всё
program test;
var
f1:text;
begin
  assign(f1,'проба.txt');
  rewrite(f1);
  close(f1);
end.

выйдет файл ЇаRЎ .txt
Если же я захочу получить доступ к файлу проба.txt ранеесозданному, то обламаюсь(вероятно, потому что нужно к каким-то другим кракозябрам ассигн делать?).
Как мне в FreePascal открыть файл проба.txt, лежащий в той же директории, что и программа?
P.S. И что выдаст AnsiUpperCase('раз два три')? И как мне UpperCase с русскими буквами получить? Написать свою функцию? - уже сделал, но как-то стрёмно стандартные системные функции напильником рихтовать.
SilverShadow
новенький
 
Сообщения: 22
Зарегистрирован: 10.03.2010 17:48:59

Re: FreePascal + консольное приложение + русские аргументы /+++/

Сообщение Mr.Smart » 10.03.2010 21:58:50

Вы для набора кода какую среду (IDE) используете?
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: FreePascal + консольное приложение + русские аргументы /+++/

Сообщение alexrayne » 10.03.2010 22:15:13

прикольное название. если на фишки.нет вынести, може че нить нафлемилиб
alexrayne
постоялец
 
Сообщения: 125
Зарегистрирован: 03.12.2008 16:56:26

Re: FreePascal + консольное приложение + русские аргументы /+++/

Сообщение SilverShadow » 11.03.2010 16:31:12

Mr.Smart писал(а):Вы для набора кода какую среду (IDE) используете?
родную IDE от 2.4.0

Добавлено спустя 1 минуту 51 секунду:
alexrayne писал(а):прикольное название. если на фишки.нет вынести, може че нить нафлемилиб

??? я отстал от жизни, и на фишки.нет теперь обсуждают FreePascal? :?:

---------------------Update:-------------------
Ну что я могу сказать? Специально достал Delphi, откомпилил консольное приложение - поведение один в один. И файл создаёт с перекодировкой в виде ЇаRЎ .txt, и аргументы из 866 в 1251 транслируются, и AnsiUpperCase так же лажает. ГрёбаныйБиллгейц(c). Хотелось более предсказуемого поведения ОС в рамках хотя бы одной машины, ну да ладно... буду думать, как выйти из данной ситуации.
SilverShadow
новенький
 
Сообщения: 22
Зарегистрирован: 10.03.2010 17:48:59

Re: FreePascal + консольное приложение + русские аргументы /+++/

Сообщение alexrayne » 12.03.2010 00:48:12

SilverShadow писал(а):Добавлено спустя 1 минуту 51 секунду:

alexrayne писал(а):прикольное название. если на фишки.нет вынести, може че нить нафлемилиб


??? я отстал от жизни, и на фишки.нет теперь обсуждают FreePascal? :?:

Думаете там людям невсеравно на что флеймить? Ну и это былоб 1й :?* - 1й пасквилянт на фишках.
alexrayne
постоялец
 
Сообщения: 125
Зарегистрирован: 03.12.2008 16:56:26

Re: FreePascal + консольное приложение + русские аргументы /+++/

Сообщение Sergei I. Gorelkin » 12.03.2010 01:19:30

См. функции WinAPI SetFileApisToANSI, SetFileApisToOEM, AreFileApisANSI, CharToOEMBuff, OEMToCharBuff.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

Рейтинг@Mail.ru