Lazarus polskie znaki

0

Witam
Wiem że był ten temat poruszany już ale osobiście nie mogę sobie poradzić..
Sprawa wygląda tak, wcześniej korzystając z Lazarusa wystarczyła funkcja AnsiToUtf8 i żadnego problemu z polskimi znakami nie było, robiłem "format" dysku zainstalowałem świeżego Lazarusa(nie wiem czy inną wersje w każdym razie najnowszą dostępną ze strony http://www.lazarus-ide.org/ , czy coś namieszałem...) i podana wyżej funkcja nie przynosi zamierzonego rezultatu.
Próbowałem różnych metod, ale przerasta mnie ta sprawa.

Przykładowa aplikacja:

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  iniFiles;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;
  ini:TiniFile;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
 ini := TiniFile.Create(ExtractFilePath(Application.ExeName)+'\ini.ini');
  Label1.Caption:=ini.readString('0','0','error');
  Memo1.Text:=ini.readString('0','0','error');
  Memo1.Lines.Add(AnsiToUtf8(ini.readString('0','1','error')));
  Memo1.Lines.Add('śćłóżźść');
 ini.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ini := TiniFile.Create(ExtractFilePath(Application.ExeName)+'\ini.ini');
   ini.WriteString('0','2',Memo1.Lines[0]);
   ini.WriteString('0','3',Memo1.Lines[1]);
   ini.WriteString('0','4',Memo1.Lines[2]);

  ini.Free;
end;

end.
                              

2016-03-01.png

2

Sam plik ma odpowiednie kodowanie?

0

Na dialogu pod Zapisz jako ... wybierz kodowanie UTF8

0

O widzisz nawet przez myśl mi nie przyszła taka możliwość.. Wielkie dzięki w pliku tkwił problem.. Czemu system domyślnie w ANSI zapisuje... No ale to już mało ważnie jeszcze raz dzięki za szybką odp
Pozdrawiam

1

O widzisz nawet przez myśl mi nie przyszła taka możliwość.. Wielkie dzięki w pliku tkwił problem.. Czemu system domyślnie w ANSI zapisuje...

Nie jęcz - zainstaluj bardziej profesjonalny edytor (np. Notepad++) i korzystaj z jego dobrodziejstw :]


Tak przy okazji - godzinkę temu pobrałem Lazarusa 1.6.0. i zainstalowałem; Wszystko poszło gładko - jak zwykle; Natomiast problem pojawił się podczas kompilacji programu, nad którym obecnie pracuję; Używa on tylko i wyłącznie łańcuchów typu UTF8String, a wraz z nimi kupki funkcji z modułu LCLProc; No i jest problem, bo aplikacja kompilowana w wersji 1.4 działa poprawnie, a w najnowszej dzieją się dziwne rzeczy ze znakami diakrytycznymi - wygląda to jakby funkcja UTF8CharacterToUnicode nie zawsze zwracała prawidłowe kody znaków; I dziwne jest to, że ten sam kod wykorzystujący wspomnianą funkcję działa bezbłędnie w głównym formularzu, a w oknach potomnych już nie... Nie mam zielonego pojęcia co się dzieje, bo dosłownie ten sam kod używany jest we wszystkich formularzach, a działa prawidłowo tylko w głównym oknie;

Jeszcze nie wiem gdzie skopałem swój kod (a może to nie u mnie jest błąd...?), jednak ewidentnie została zmodyfikowana biblioteka LCL, jeśli o Unikod chodzi; Świadczy o tym zupełnie inna deklaracja aliasu UTF8String czy dyrektywy Deprecated, powrzucane w module LCLProc (z informacją, że niektóre funkcje przeniesione są do modułu LazUTF8);

Póki co wrócilem do wersji 1.4., jednak muszę za niedługo zbadać tę sprawę;

PS: Faktycznie, nieco się zmieniło z Unicode - http://wiki.freepascal.org/Better_Unicode_Support_in_Lazarus

1 użytkowników online, w tym zalogowanych: 0, gości: 1