Страница 1 из 1

Русские буквы в исходящем текстовом файле

СообщениеДобавлено: 10.01.2011 21:29:53
Adreal
Извините, если уже спрашивалось, просто уже достаточно долго ищу ответ, и не могу найти. Требуется вписывать в файл русские буквы. При данном примере программы в файле остаются только всякие значки. Дело в кодировке, но как исправить?


uses crt;
var
t:ansistring;
f:text;
i:integer;
begin
clrscr;
assign(f,'d:/1/1.txt');
rewrite(f);
writeln('ввод в текстовый файл');
readln(t);
writeln(f,t);

readln;
close(f);
end.


Re: Русские буквы в исходящем текстовом файле

СообщениеДобавлено: 11.01.2011 01:55:27
Odyssey
Подозреваю что под Windows ввод происходит в кодировке CP866. Если использовать модули Lazarus, то можно попробовать добиться результата двумя способами (код на работоспособность я не проверял, это за вами):
1)
Код: Выделить всё
uses ..., FileUtil;
...
writeln(f, Utf8ToAnsi(ConsoleToUtf8(t)));
2)
Код: Выделить всё
uses ..., LConvEncoding,
...
writeln(f, Utf8toCp1251(Cp866ToUtf8(t)));

Ещё можно не менять программу, а просто открывать файл редактором, который понимает CP866, например AkelPad'ом.

Re: Русские буквы в исходящем текстовом файле

СообщениеДобавлено: 11.01.2011 21:00:42
Adreal
Что-то у меня не получилось подшить те модули, которые вы указали...(

И видимо там другой код кодировки, предположительно ANSI... Потому что программа AkelPad тоже не видит русские буквы....

Re: Русские буквы в исходящем текстовом файле

СообщениеДобавлено: 11.01.2011 21:30:16
VirtUX
FileUtil в консольном не так-то просто подключить
а вообще - эта тема стопятьсот раз уже обсуждалась. Поисковиком пользуйтесь.

Re: Русские буквы в исходящем текстовом файле

СообщениеДобавлено: 11.01.2011 23:38:47
Odyssey
Adreal писал(а):Что-то у меня не получилось подшить те модули, которые вы указали...(

Не удивительно, они входят в состав Lazarus. Если он установлен, нужно либо прописать в настройках проекта пути к ним (это зависит от того, в чём вы редактируете и как компилируете код), либо складывать эти модули в папку своей программы. Плюс их придётся таскать с собой туда, где не установлен Lazarus. Так что это вообще не лучшее решение для учебных программ, которые используют только crt.

Adreal писал(а):И видимо там другой код кодировки, предположительно ANSI... Потому что программа AkelPad тоже не видит русские буквы....

Можете попробовать выложить проблемный файл сюда, на форум. Тогда кто-нибудь ещё сможет проверить в какой он кодировке.

P.S. И кстати,
Код: Выделить всё
writeln('ввод в текстовый файл');
все нормально отображает в консоли?

Re: Русские буквы в исходящем текстовом файле

СообщениеДобавлено: 20.09.2011 19:38:02
modestusmunh
Код: Выделить всё
uses
FileUtil;
...
WriteLn(UTF8ToConsole('ввод в текстовый файл');
...

Re: Русские буквы в исходящем текстовом файле

СообщениеДобавлено: 20.09.2011 19:47:43
Mr.Smart
modestusmunh FileUtil - часть LCL!

Re: Русские буквы в исходящем текстовом файле

СообщениеДобавлено: 20.09.2011 20:43:25
modestusmunh
И как быть?
У Мансурова написано то, что я цитировал ранее. У меня не работает. Но мне и не очень-то и надо. Но всё же: как быть?

Re: Русские буквы в исходящем текстовом файле

СообщениеДобавлено: 20.09.2011 21:01:27
Mr.Smart

Re: Русские буквы в исходящем текстовом файле

СообщениеДобавлено: 21.09.2011 17:12:57
Ism
Чтоб корректно писать в разных кодировках, надо точно представлять,, в какой пишешь, и в какой читаешь.