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

Форум для изучающих FPC и их учителей.

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

Ответить
Adreal
незнакомец
Сообщения: 2
Зарегистрирован: 10.01.2011 20:21:43

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

Сообщение 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.

Odyssey
энтузиаст
Сообщения: 580
Зарегистрирован: 29.11.2007 16:32:24

Сообщение Odyssey »

Подозреваю что под Windows ввод происходит в кодировке CP866. Если использовать модули Lazarus, то можно попробовать добиться результата двумя способами (код на работоспособность я не проверял, это за вами):
1)

Код: Выделить всё

uses ..., FileUtil;
...
writeln(f, Utf8ToAnsi(ConsoleToUtf8(t)));
2)

Код: Выделить всё

uses ..., LConvEncoding,
...
writeln(f, Utf8toCp1251(Cp866ToUtf8(t)));

Ещё можно не менять программу, а просто открывать файл редактором, который понимает CP866, например AkelPad'ом.
Adreal
незнакомец
Сообщения: 2
Зарегистрирован: 10.01.2011 20:21:43

Сообщение Adreal »

Что-то у меня не получилось подшить те модули, которые вы указали...(

И видимо там другой код кодировки, предположительно ANSI... Потому что программа AkelPad тоже не видит русские буквы....
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Сообщение VirtUX »

FileUtil в консольном не так-то просто подключить
а вообще - эта тема стопятьсот раз уже обсуждалась. Поисковиком пользуйтесь.
Odyssey
энтузиаст
Сообщения: 580
Зарегистрирован: 29.11.2007 16:32:24

Сообщение Odyssey »

Adreal писал(а):Что-то у меня не получилось подшить те модули, которые вы указали...(

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

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

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

P.S. И кстати,

Код: Выделить всё

writeln('ввод в текстовый файл'); 
все нормально отображает в консоли?
modestusmunh
новенький
Сообщения: 13
Зарегистрирован: 07.09.2011 16:51:00

Сообщение modestusmunh »

Код: Выделить всё

uses
FileUtil;
...
WriteLn(UTF8ToConsole('ввод в текстовый файл');
...
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

modestusmunh FileUtil - часть LCL!
modestusmunh
новенький
Сообщения: 13
Зарегистрирован: 07.09.2011 16:51:00

Сообщение modestusmunh »

И как быть?
У Мансурова написано то, что я цитировал ранее. У меня не работает. Но мне и не очень-то и надо. Но всё же: как быть?
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

Чтоб корректно писать в разных кодировках, надо точно представлять,, в какой пишешь, и в какой читаешь.
Ответить