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

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

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

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

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

Сообщение Lifter »

Нужно записать содержимое Memo1 в файл.

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

  Memo1.Lines.SaveToFile(ExtractFilePath(ParamStr(0)) + 'log.txt');

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

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

Сообщение Padre_Mortius »

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

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;

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

Сообщение Lifter »

Спасибо, работает!
Последний раз редактировалось Lifter 03.06.2012 17:21:29, всего редактировалось 1 раз.
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

Спасибо, исправил.
daesher
постоялец
Сообщения: 221
Зарегистрирован: 09.03.2010 21:17:14

Сообщение daesher »

Можно намного быстрее (хотя и чуть менее надёжно):

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

st:=TStringList.Create;
st.Text:=UTF8ToAnsi(Memo1.Lines.Text);
st.SaveToFile(ExtractFilePath(ParamStr(0)) + 'log.txt');
st.Free;
Lifter
новенький
Сообщения: 21
Зарегистрирован: 19.04.2012 02:17:24

Сообщение Lifter »

daesher а можно пояснить, в чем чуть меньшая надежность?
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

В символах окончания строк
daesher
постоялец
Сообщения: 221
Зарегистрирован: 09.03.2010 21:17:14

Сообщение daesher »

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

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

Сообщение Lifter »

Спасибо за пояснения!
Ответить