S
slavas
Мне нужно отредактировать в TMemo текстовый файл (он в формате Unicode). Каким образом мне его загрузить в Memo?
Просто командой Memo1.Lines.LoadFromFile() отображается что-то непонятное. А потом его ещё и сохранить так чтобы он остался в Unicode?
Пожалуйста работающий примерчик. У меня Дельфи 7
-----
Два дня прошло - ответов нет. Неужто сложный вопрос? Ладно.
Вот что я нашел в моих поисках:
Все время какая то проблема с несовместимыми типами.
Просто командой Memo1.Lines.LoadFromFile() отображается что-то непонятное. А потом его ещё и сохранить так чтобы он остался в Unicode?
Пожалуйста работающий примерчик. У меня Дельфи 7
-----
Два дня прошло - ответов нет. Неужто сложный вопрос? Ладно.
Вот что я нашел в моих поисках:
Помогите это дело перевести для случая с Unicode. У меня не получается.UTF-8 и Unicode это немного разные вещи. Доказательством тому служит то, что в Delphi есть функции UTF8ToUnicode и UnicodeToUTF8.
Загружать и сохранять файлы с Unicode (или UTF-8, Вы уж там определитесь сами, с чем хотите работать) можно как и любые другие текстовые файлы. Файл он и в Африке файл, вне зависимости от его содержимого. А вот как работать с этим самым содержимым - это уже Ваша проблема. Например FAR сначала перекодирует UTF-8 в DOS кодировку, после чего Вы можете его править. При сохранении происходит перекодировка в обратном порядке - из DOS в UTF-8.
В Delphi для перекодировок есть специальные функции. Две из них я Вам привёл. Для работы с UTF-8 есть функции UTF8ToAnsi и AnsiToUTF8. Они соответственно перекодируют из UTF8 в кодировку ANSI и обратно.
Таким образом можно составить простейший алгоритм по работе с файлом в кодировке UTF-8.
1. Открываете файл обычным образом.
2. Читаете файл построчно.
3. Перекодируете прочитанную строку в ANSI.
4. Заносите перекодированную строку, например, в TMemo.
5. Редактируете, а потом делаете всё в обратном порядке.
Var
f: TextFile;
s: UTF8string;
Begin
//Открываем файл
Assign(F, 'файл.txt');
Reset(F);
While not Eof(F) Do
Begin
ReadLn(F, s); //Считываем строку из файла
Memo1.Lines.Add(UTF8ToAnsi(s)); //Заносим строку в Мемо с перекодировкой
End;
...
End;
Все время какая то проблема с несовместимыми типами.