Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > INI Files


Автор: Lence 20.11.2006, 16:27
Программа сохраняет данные в ини файл 
по умолчанию он сохраняется в ANSI
Необходимо сделать так чтоб файл сохранялся в UTF-8 кодировке
и сделать так чтоб при загрузки ини файла - Edit' ы которые будут отображать/писать  данные тоже были в utf-8
потому что будут использоваться не стандартные символы ... 


вопрос - как это все организовать ???? 

В поиске много все написано - но не соображу каким образом это можно применить к себе.... 

Автор: Yanis 20.11.2006, 16:57
Цитата(Lence @  20.11.2006,  17:27 Найти цитируемый пост)
вопрос - как это все организовать ???? 

Сделать наследника, который будет конвертировать Ansi строки в unicode. INI основан на ANSI.

Автор: Lence 20.11.2006, 16:59
Цитата(Yanis @  20.11.2006,  16:57 Найти цитируемый пост)
Цитата(Lence @  20.11.2006,  17:27 )вопрос - как это все организовать ???? Сделать наследника, который будет конвертировать Ansi строки в unicode. INI основан на ANSI.


Как сделать???? 

Автор: Yanis 20.11.2006, 17:01
Цитата(Lence @  20.11.2006,  17:59 Найти цитируемый пост)
Как сделать????

Код
TUnicodeIniFile = class(TIniFile)

Автор: Lence 20.11.2006, 17:38
Yanis, 
я не свосем понимаю что дальше делать .... 

вот пример что у меня сейчас 

Код

// сохранение 
var
  sIniFile: TIniFile;
 w: string;

begin
 w:= ExtractFilePath(paramstr(0));
       sIniFile := TIniFile.Create(w+ 'Settings.ini');
        sIniFile.WriteString('Owner','Owner',Edit22.Text);
       sIniFile.WriteString('Owner','Responsible',Edit23.Text);
       sIniFile.WriteString('Owner','ResponsibleAppointment',Edit24.Text);
       sIniFile.WriteString('Owner','Executor',EditText);
       sIniFile.WriteString('Owner','ExecutorAppointment',Edit26.Text);
       sIniFile.WriteString('Owner','Country',Edit27.Text);
       sIniFile.WriteString('Owner','City',Edit28.Text);
       sIniFile.WriteString('Owner','Address',Edit29.Text);
       sIniFile.WriteString('Owner','Phone',Edit30.Text);
       sIniFile.WriteString('Owner','Fax',Edit31.Text);
       sIniFile.WriteString('Owner','Email',Edit32.Text);
       sIniFile.WriteString('Owner','Web',Edit33.Text);
       sIniFile.Free;




Код

// загрузка
var
  sIniFile: TIniFile;
 w: string;

begin
w:= ExtractFilePath(paramstr(0));
       sIniFile := TIniFile.Create(w+ 'Settings.ini');
       Edit22.Text:= sInifile.ReadString('Owner','Owner',Edit22.Text);
       Edit23.Text:= sInifile.ReadString('Owner','Responsible',Edit23.Text);
       Edit24.Text:= sInifile.ReadString('Owner','ResponsibleAppointment',Edit24.Text);
       Edit25.Text:= sInifile.ReadString('Owner','Executor',Edit25.Text);
       Edit26.Text:= sInifile.ReadString('Owner','ExecutorAppointment',Edit26.Text);
       Edit27.Text:= sInifile.ReadString('Owner','Country',Edit27.Text);
       Edit28.Text:= sInifile.ReadString('Owner','City',Edit28.Text);
       Edit29.Text:= sInifile.ReadString('Owner','Address',Edit29.Text);
       Edit30.Text:= sInifile.ReadString('Owner','Phone',Edit30.Text);
       Edit31.Text:= sInifile.ReadString('Owner','Fax',zEdit31.Text);
       Edit32.Text:= sInifile.ReadString('Owner','Email',Edit32.Text);
       Edit33.Text:= sInifile.ReadString('Owner','Web',Edit33.Text);
    end;


что мне сделать чтоб сохранялось в UTF-8 и при загрузке Edit отображали в UTF-8 


Автор: Yanis 20.11.2006, 18:51
Цитата(Lence @  20.11.2006,  18:38 Найти цитируемый пост)
что мне сделать чтоб сохранялось в UTF-8 и при загрузке Edit отображали в UTF-8

Стандартные VCL контролы не поддерживают unicode.
По ходу дела, придётся создавать собственный класс для работы с ini и использовать unicode-версии функций WritePrivateProfileStringW/GetPrivateProfileStringW.

Автор: Lence 20.11.2006, 21:10
C компонентами разобрался ... 
http://download.tntware.com/delphi_unicode_controls/TntWareDelphiUnicodeControlsSetup.exe
теперь проблема в том как это все сохранить в ини файл в Unicode - а то у меня сохраняется с вопросами ... и при открытии снова уже не показывается unicode - а вопросы .... 
В общем - как ИНИ файл заставить сохранться в unicode ???? 

Автор: Sirius_Lampochkin 26.11.2006, 16:31
Вопрос очень срочный, помогите!!!

Интересуюсь первой частью вопроса, а именно 
Цитата

что мне сделать чтоб сохранялось в UTF-8

Уточняю: беру обычную ansi-строку, применяю функцию AnsiToUtf8() и результат хочу сохранить в файл в UTF8. После необходимо все это как-то считать и получить ту же самую ansi-строку.


Как? Чем? Лучше всего с примером. 
Вопрос очень срочный, помогите!!!


Автор: Sunvas 26.11.2006, 16:48
Цитата(Sirius_Lampochkin @  26.11.2006,  16:31 Найти цитируемый пост)
После необходимо все это как-то считать и получить ту же самую ansi-строку.

Ну, дык ситываешь, потом перекодируешь функицей Utf8ToAnsi.

Автор: Sirius_Lampochkin 26.11.2006, 17:06
использую 
Код

var
  chars: array [0..255] of char;
  str :string;
  i: integer;
 
......

str := ansitoutf8('игра');
for i:=0 to length(str) do 
  chars[i]:=str[i];

WritePriviteProfileString('menu','game',chars,'c:\menu.ini');


но в файл пишется только: 

[menu]
game=

и после равно пусто! (((

Автор: Sirius_Lampochkin 26.11.2006, 17:23
так кажись чего-то получается )  тьфу-тьфу-тьфу, да поможет мне шаманский бубен.


использую StringToWideChar, WritePrivateProfileStringW и обратные им. 

Автор: Alexeis 26.11.2006, 22:05
Lence, не мучайтесь, пишите строку как буфер данных, типа 
IniFile.WriteBinaryStream();

Автор: mogikan 15.2.2007, 18:55
С етих файлах можно решит проблему

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)