Delphi 10.4 Memo i polskie litery

Delphi 10.4 Memo i polskie litery
TC
  • Rejestracja:prawie 3 lata
  • Ostatnio:ponad 2 lata
  • Postów:1
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

edytowany 1x, ostatnio: TomaszCooper
katakrowa
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 2 lata
  • Lokalizacja:Chorzów
  • Postów:1670
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


Projektowanie i programowanie. Hobbystycznie elektronika i audio oszołom.
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 8 godzin
  • Lokalizacja:Tuchów
  • Postów:12176
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.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
katakrowa
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 2 lata
  • Lokalizacja:Chorzów
  • Postów:1670
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.


Projektowanie i programowanie. Hobbystycznie elektronika i audio oszołom.
edytowany 1x, ostatnio: katakrowa
flowCRANE
Delphi 10.4 nie jest stare. :D
katakrowa
No może faktycznie nie stare. Jeszcze kilka miesięcy temu miałem 10.3 i nie mam pewności czy tam domyślnie ustawiało się unicode. W wersji 11 już tak jest.
KA
No bez przesady nie pamiętam dokładnie ale albo od 2009 albo od następnej czyli 2010 jest Unicode.
katakrowa
@kAzek: jako domyślny?
abrakadaber
abrakadaber
  • Rejestracja:prawie 13 lat
  • Ostatnio:9 miesięcy
  • Postów:6610
1

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

screenshot-20220726012808.png


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
KA
  • Rejestracja:prawie 20 lat
  • Ostatnio:2 minuty
  • Lokalizacja:Gorlice
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);


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.