Как перекодировать при записи Memo1 в файл?

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

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

Как перекодировать при записи Memo1 в файл?

Сообщение Lifter » 03.06.2012 13:31:05

Нужно записать содержимое Memo1 в файл.
Код: Выделить всё
  Memo1.Lines.SaveToFile(ExtractFilePath(ParamStr(0)) + 'log.txt');

Сохраняет в UTF-8, а надо в ANSI, чтобы потом блокнот корректно отображал русские буквы.

Как записать в файл в кодировке ANSI?
Lifter
новенький
 
Сообщения: 21
Зарегистрирован: 19.04.2012 02:17:24

Re: Как перекодировать при записи Memo1 в файл?

Сообщение Padre_Mortius » 03.06.2012 13:43:15

Код: Выделить всё
st:=TStringList.Create;
st.Clear;
for i:= 0 to Memo1.Lines.Count -1 do
begin
  st.Add(UTF8ToAnsi(Memo1.Lines[i])); 
end;
st.SaveToFile(ExtractFilePath(ParamStr(0)) + 'log.txt');
st.Free;

где-то так... писалось в браузере без проверки.
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Как перекодировать при записи Memo1 в файл?

Сообщение Lifter » 03.06.2012 13:53:15

Спасибо, работает!
Последний раз редактировалось Lifter 03.06.2012 17:21:29, всего редактировалось 1 раз.
Lifter
новенький
 
Сообщения: 21
Зарегистрирован: 19.04.2012 02:17:24

Re: Как перекодировать при записи Memo1 в файл?

Сообщение Padre_Mortius » 03.06.2012 14:04:27

Спасибо, исправил.
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Как перекодировать при записи Memo1 в файл?

Сообщение daesher » 03.06.2012 15:50:09

Можно намного быстрее (хотя и чуть менее надёжно):
Код: Выделить всё
st:=TStringList.Create;
st.Text:=UTF8ToAnsi(Memo1.Lines.Text);
st.SaveToFile(ExtractFilePath(ParamStr(0)) + 'log.txt');
st.Free;
daesher
постоялец
 
Сообщения: 221
Зарегистрирован: 09.03.2010 22:17:14

Re: Как перекодировать при записи Memo1 в файл?

Сообщение Lifter » 03.06.2012 17:25:35

daesher а можно пояснить, в чем чуть меньшая надежность?
Lifter
новенький
 
Сообщения: 21
Зарегистрирован: 19.04.2012 02:17:24

Re: Как перекодировать при записи Memo1 в файл?

Сообщение Ism » 03.06.2012 17:32:17

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

Re: Как перекодировать при записи Memo1 в файл?

Сообщение daesher » 03.06.2012 20:46:31

Ism писал(а):В символах окончания строк

В общем и в целом - да. В сочетании с UTF8 это может быть потенциально даже более опасно. Так, если, скажем, в конце третьей строки произошёл сбой последовательности UTF8, то первый способ просто даст сбой в третьей строке, а второй способ может сбить и всё последующее.
daesher
постоялец
 
Сообщения: 221
Зарегистрирован: 09.03.2010 22:17:14

Re: Как перекодировать при записи Memo1 в файл?

Сообщение Lifter » 03.06.2012 23:35:21

Спасибо за пояснения!
Lifter
новенький
 
Сообщения: 21
Зарегистрирован: 19.04.2012 02:17:24


Вернуться в Обучение Free Pascal

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

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

Рейтинг@Mail.ru