Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2010, 16:10   #1
VHomer
Пользователь
 
Регистрация: 11.10.2008
Сообщений: 82
Вопрос Проблемы с отображением кирилицы в Memo

Открываю текстовой файл с помощью Opendialog. Крилица отображается криво, символы немонятные. Как сделать, чтобы крилица отображалась нормально?
Кстати, если открываю файл в обычном блокноте, то кирилца тоже там криво отображается, а вот если открыть через akelpad, то всё хорошо.
Файл у меня текстового типа, но расширение не txt.
Мне потом ещё надо будет править текст в Memo и пересохранять файл. Опять же надо, чтобы кирилица нормально сохранялась. В данный момент я открываю файл, в memo крилица отобразилась некорректно, пересохраняю и теперь уже если я пересохранённый файл открою через AkelPad кирилица тоже кривая.
Помогите плиз! У меня уже вся концепция, алгоритм проги готов, а тут такая фигня мешает.

Последний раз редактировалось VHomer; 07.12.2010 в 16:22. Причина: Уточнение
VHomer вне форума Ответить с цитированием
Старый 07.12.2010, 16:29   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну похоже несовпадение кодировок, в вашем файле какая кодировка?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.12.2010, 16:32   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

OemToCharBuff - транслирует из кирилицы DOS в кодировку винды,
обратная операция - CharBuffToOem (или что-то в этом роде, точно не помню)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 07.12.2010, 16:35   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Аватар, насчет кодировки винды заявление громкое.
которую кодировку можно считать её 1251, UTF8, Unicode? OEM это ДОС кодировка обычно 866, обычно эта функция нужна для печати русского текста в консоль.

а в файле может быть и UTF8.

так что надо твердо знать что за кодировка там, а уже потом советовать функции.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.12.2010, 16:36   #5
VHomer
Пользователь
 
Регистрация: 11.10.2008
Сообщений: 82
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
ну похоже несовпадение кодировок, в вашем файле какая кодировка?
Видимо надо 866 (OEM-русская), а у меня сохраняется в 1251 (ANSI-кирилица).
Я просто посмотрел 2 файла. В том где нормально отображается написано что 866, а где криво 1251.
То есть получается при выгрузки в memo 866 перекодировывается в 1251 и так же сохраняется криво.
VHomer вне форума Ответить с цитированием
Старый 07.12.2010, 16:43   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

в мемо или Юникод(если версия Делфи последняя) либо ANSI-1251(если не новая(Д6,Д7))
если в файле 866, то тогда криво отображает потому что никто не переводит её в 1251.

если это так то Аватар оказался прав насчет нужных функций.

если хотите то выложите пример файла, я проверю его на кодировку, и напишу код его загрузки в мемо.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.12.2010, 16:45   #7
VHomer
Пользователь
 
Регистрация: 11.10.2008
Сообщений: 82
По умолчанию

Та, щас попробую грамотно сформулировать что я ещё выяснил.
Файл однозначно должен сохраняться в 866 OEM. Я не знаю как это сделать.
Но прежде чем ему нормально сохраниться в OEM, тексту надо в том же формате отображаться в memo.
VHomer вне форума Ответить с цитированием
Старый 07.12.2010, 16:47   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

значит вы твердо уверены что он в ДОС кодировке.(мне это и нужно было)
тогда секунду.
Код:
procedure LoadTextFileAsOEM(FileName:string;Strings:TStrings);
var s:ANSIstring;
    f:TextFile;
begin
 AssignFile(f,FileName);
 Reset(f);
 Strings.Clear;
 while not Eof(f) do
  begin
   ReadLn(f,s);
   OemToCharBuffA(@s[1],@s[1],Length(s));
   Strings.Add(s);
  end;
 CloseFile(f);
end;

procedure SaveTextFileAsOEM(FileName:string;Strings:TStrings);
var s:ANSIstring;
    f:TextFile;
    i:Integer;
begin
 AssignFile(f,FileName);
 ReWrite(f);
 for i:=0 to Strings.Count-1 do
  begin
   s:=Strings[i];
   CharToOemBuffA(@s[1],@s[1],Length(s));
   Writeln(f,s);
  end;
 CloseFile(f);
end;
//ну и пример применения
procedure TForm1.Button1Click(Sender: TObject);
begin
 SaveTextFileAsOEM('C:\Test.txt',Memo1.Lines);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 LoadTextFileAsOEM('C:\Test.txt',Memo1.Lines);
end;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 07.12.2010 в 17:05.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.12.2010, 16:50   #9
VHomer
Пользователь
 
Регистрация: 11.10.2008
Сообщений: 82
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
если хотите то выложите пример файла, я проверю его на кодировку, и напишу код его загрузки в мемо.
Что то я не понял как файлы загружать. Открываю вложить, выбираю файл, нажимою загрузить и нигде его не вижу(((
Объясните плиз.

Последний раз редактировалось VHomer; 07.12.2010 в 16:52.
VHomer вне форума Ответить с цитированием
Старый 07.12.2010, 16:56   #10
VHomer
Пользователь
 
Регистрация: 11.10.2008
Сообщений: 82
По умолчанию

Получилось)))
Я не заметил, что файл который я пытался загрузить по формату не подходит
Вложения
Тип файла: rar example.rar (269 байт, 41 просмотров)
VHomer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы с отображением содержимого res файла Gamst Общие вопросы Delphi 1 26.05.2010 16:50
Проблемы с memo))) Poltev86 Компоненты Delphi 1 19.05.2010 10:47
Проблемы с отображением WPF форм. Конструктор вообще не открывается Casper-SC Общие вопросы .NET 1 14.03.2010 23:38
MediaWiki. Проблемы с отображением кириллицы в URL. Harima Hario WordPress и другие CMS 0 01.03.2010 17:49
Windows 7 некорректное отображение кирилицы Stilet Windows 6 07.05.2009 13:31