Delphi 10.4 Memo i polskie litery

0

Mam plik tekstowy w którym po otwarciu w Notepadzie widzę polskie i czeskie litery.
Plik to zwykły plik txt.
Niestety po załadowaniu do Memo zamiast czeskich i polskich znaków widzę krzaczki (zamiast jednego znaku - dwa dziwne znaki).
Co ciekawe po zapisaniu zawartości Memo do pliku poprzez Memo.Lines.SaveToFile
i otwarciu pliku w Notepadzie znowu wodzę litery polskie i czeskie.
Czcionka w notatniku i Memo ta sama.
Gdzie szukać przyczyny?

Sprawdziłem jeszcze plik w HexEdytorze i tam fakycznie widać, że każda olska litera kodowana jest na dwóch bajtach.
Wygląda to jak na obrazku i właśnie tak mi to pokazuje Memo. Jak temu zaradzic?
screenshot-20220725213458.png

1

Musisz zrobić projekt Unicode wtedy jeśli w pliku tekstowym masz kodowanie UTF-8 to powinno się wszystko ładnie wczytywać.

Tak powinieneś mieć ustawiony projekt w Delphi:

screenshot-20220725222318.png

2

Nie chce mi się wnikać o co chodzi z tymi „polskimi i czeskimi znakami” — im dłużej czytam Twój post, tym mniej rozumiem o co Ci chodzi. Nieważne — tekst w tym pliku najpewniej kodowany jest w UTF-8, dlatego znaki z zakresu ASCII zajmują po bajcie, a te diakrytyzowane po dwa bajty. A odpowiadając na pytanie „co z tym zrobić” — nic, bo Unicode to standard od milionów lat.

0
furious programming napisał(a):

Nie chce mi się wnikać o co chodzi z tymi „polskimi i czeskimi znakami” — im dłużej czytam Twój post, tym mniej rozumiem o co Ci chodzi. Nieważne — tekst w tym pliku najpewniej kodowany jest w UTF-8, dlatego znaki z zakresu ASCII zajmują po bajcie, a te diakrytyzowane po dwa bajty. A odpowiadając na pytanie „co z tym zrobić” — nic, bo Unicode to standard od milionów lat.

Ma "nie najnowsze" Delphi 10.4 i tam być może domyślnie jest jeszcze codepage=1250 albo coś namieszał w samych ustawieniach projektu.

1

co masz we właściwościach fontu dla memo ustawione?

screenshot-20220726012808.png

4

To jest chyba Windows-1250 ale Delphi może to automatycznie przekonwertować powinno zadziałać coś takiego:
Memo1.Lines.LoadFromFile('nazwa pliku', TEncoding.UTF8);
Przy zapisie podobnie możesz użyć:
Memo1.Lines.SaveToFile('nazwa pliku', TEncoding.UTF8);

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