/+++/ А также обидели русские буквы в функциях AnsiUpperCase/AnsiLowerCase. Не говоря уже о том, что букву Ё(ё) за букву-то совсем не считают, в ['А'..'Я'](['а'..'я']) её нет!
FreePascal + консольное приложение + русские аргументы /+++/
Модератор: Модераторы
-
SilverShadow
- новенький
- Сообщения: 22
- Зарегистрирован: 10.03.2010 16:48:59
FreePascal + консольное приложение + русские аргументы /+++/
Создаю свою простенькую консольную программу для обработки файлов. При получении аргументов через ParamCount()/ParamStr() русские буквы корёжутся в кодировку windows, хотя я об этом совсем не прошу. И даже если я делаю процедуру обратного преобразования(sic!), всё равно не открываются файлы с русскими именами через assign/reset(rewrite). Что я неправильно делаю?
/+++/ А также обидели русские буквы в функциях AnsiUpperCase/AnsiLowerCase. Не говоря уже о том, что букву Ё(ё) за букву-то совсем не считают, в ['А'..'Я'](['а'..'я']) её нет!
/+++/ А также обидели русские буквы в функциях AnsiUpperCase/AnsiLowerCase. Не говоря уже о том, что букву Ё(ё) за букву-то совсем не считают, в ['А'..'Я'](['а'..'я']) её нет!
При получении аргументов через ParamCount()/ParamStr() русские буквы корёжутся в кодировку windows, хотя я об этом совсем не прошу.
Free Pascal здесь не причём. Он берёт символы именно в той кодировке в которой передаёт их система.
И даже если я делаю процедуру обратного преобразования(sic!), всё равно не открываются файлы с русскими именами через assign/reset(rewrite)
Мало информации.
то букву Ё(ё) за букву-то совсем не считают, в ['А'..'Я'](['а'..'я']) её нет!
Как известно, что ANSI код символа Ё = 0xA8, а ё = 0xB8. Указанный вами диапазон просто не пересекает эти кода т.к. код А = 0xC0. Если вы хотите учесть в множестве коды этих букв пишите так:
Код: Выделить всё
['Ё','ё','А'..'Я','а'..'я']и FreePascal здесь вообще не причём
-
SilverShadow
- новенький
- Сообщения: 22
- Зарегистрирован: 10.03.2010 16:48:59
Код: Выделить всё
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 с русскими буквами получить? Написать свою функцию? - уже сделал, но как-то стрёмно стандартные системные функции напильником рихтовать.
Вы для набора кода какую среду (IDE) используете?
прикольное название. если на фишки.нет вынести, може че нить нафлемилиб
-
SilverShadow
- новенький
- Сообщения: 22
- Зарегистрирован: 10.03.2010 16:48:59
родную IDE от 2.4.0Mr.Smart писал(а):Вы для набора кода какую среду (IDE) используете?
Добавлено спустя 1 минуту 51 секунду:
alexrayne писал(а):прикольное название. если на фишки.нет вынести, може че нить нафлемилиб
??? я отстал от жизни, и на фишки.нет теперь обсуждают FreePascal?
---------------------Update:-------------------
Ну что я могу сказать? Специально достал Delphi, откомпилил консольное приложение - поведение один в один. И файл создаёт с перекодировкой в виде ЇаRЎ .txt, и аргументы из 866 в 1251 транслируются, и AnsiUpperCase так же лажает. ГрёбаныйБиллгейц(c). Хотелось более предсказуемого поведения ОС в рамках хотя бы одной машины, ну да ладно... буду думать, как выйти из данной ситуации.
SilverShadow писал(а):Добавлено спустя 1 минуту 51 секунду:
alexrayne писал(а):прикольное название. если на фишки.нет вынести, може че нить нафлемилиб
??? я отстал от жизни, и на фишки.нет теперь обсуждают FreePascal?
Думаете там людям невсеравно на что флеймить? Ну и это былоб 1й
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
См. функции WinAPI SetFileApisToANSI, SetFileApisToOEM, AreFileApisANSI, CharToOEMBuff, OEMToCharBuff.
