Jak odczytać polskie znaki z tekstowych plików *.dfm i *.fmx

Odpowiedz Nowy wątek
2019-09-06 10:33
0

Ciąg polskich ęóąśżźć€ znaków wpisany do komponentu TEdit i zapisany do pliku tekstowego *.dfm albo *.fmx wygląda tak:
#281#243#261#347#380#378#263#8364
Chciałbym we własnym programia (C++ Builder 10.3) odczytać tak zapisany tekst. Czy może ktoś wie jaka procedura dokonuje konwersji powyższego tekstu na UnicodeString ?
Pomijam opcję wczytania całego pliku i wyłuskanie tekstu z komponentu TEdit.

Pozostało 580 znaków

2019-09-06 11:37
1

to są kody znaków w unicode https://en.wikipedia.org/wiki/List_of_Unicode_characters - 281 dec = ę


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.

Pozostało 580 znaków

2019-09-06 12:08
1

To mi pachnie problemem XY. Pliki DMF opisują konstrukcję okna w C++ builder i nie widzę powodu, by twój kod musiał odczytywać ten plik.
Możesz wyjaśnić po co ci to? W sensie jaką funkcjonalność chcesz uzyskać z punktu widzenie użytkownika końcowego.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.

Pozostało 580 znaków

2019-09-06 12:16
0
abrakadaber napisał(a):

to są kody znaków w unicode https://en.wikipedia.org/wiki/List_of_Unicode_characters - 281 dec = ę

To wiem - znam sposób kodowania UTF-8. Chodzi mi tylko o procedurę która ciąg znaków składający się z cyfr i znaku '#' (czyli znaków o kodach <127 ) "#281#243#261#347#380#378#263#8364" przekształci w UnicodeString "óąśżźć€". Sądzę że istnieje, bo bilder to robi gdyż jak wczytuje formę (z plikiem tekstowy *.dfm albo *.fmx) z TEdit to wyświetla polskie znaki. Nie mogę tylko jej znaleźć.

MarekR22 napisał(a):

To mi pachnie problemem XY. Pliki DMF opisują konstrukcję okna w C++ builder i nie widzę powodu, by twój kod musiał odczytywać ten plik.
Możesz wyjaśnić po co ci to? W sensie jaką funkcjonalność chcesz uzyskać z punktu widzenie użytkownika końcowego.

Piszę program który analizuje pliki tekstowe *.fmx w celu wyłuskania z nich pewnych nielicznych informacji tekstowych z polskimi znakami. Mógłym oczywiście mechanizmami Buildera wczytać i utworzyć całą formę a z jej komponentów odczytać interesujący mnie tekst jako UnicodeString ale to byłoby bardzo nadmiarowe (samą formą nie jestem w tym programie zainteresowany).

edytowany 2x, ostatnio: cerrato, 2019-09-06 12:27
Gdzie ty tu widzisz UTF-8? To są bezpośrednie odnośniki do znaków unicode. Gdyby tam gdzieś był UTF-8 to zamiast: #281 byłoby: #196#153! - MarekR22 2019-09-06 13:30

Pozostało 580 znaków

2019-09-06 14:12
0

OK. racja - niefortunny skrót myślowy. Chodziło mi o zapis U+105 (hexadecymalnie) co jest równoważne #261 (dziesiętnie) .

Pozostało 580 znaków

2019-09-06 15:46
0

nie bardzo rozumiem jakiej procedury się spodziewasz - jak już pisałem, np. 281 to kod znaku i jak każdy kod można go zamienić na znak procedurą Chr, która jest w delphi odkąd pamiętam (a jest to już kawałek czasu) http://docwiki.embarcadero.com/Libraries/Rio/en/System.Chr


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.

Pozostało 580 znaków

2019-09-06 16:00
0
abrakadaber napisał(a):

nie bardzo rozumiem jakiej procedury się spodziewasz - jak już pisałem, np. 281 to kod znaku i jak każdy kod można go zamienić na znak procedurą Chr, która jest w delphi odkąd pamiętam (a jest to już kawałek czasu) http://docwiki.embarcadero.com/Libraries/Rio/en/System.Chr

np. takiej
w FireMonkey Label1->Text = P("#281#243#261#347#380#378#263#8364");
w VCL Label1->Caption = P("#281#243#261#347#380#378#263#8364");
i na ekranie wyświetli się ęóąśżźć€. Sądzę, że Embarcadero ma ją w Builder - bo dokładnie to robi (!) czytając plik tekstowy *.dfm/*.fmx przy otwieraniu w kompilatorze zapisanej wcześniej TForm dla dalszej edycji. Pewnie ma też procedurę odwrotną bo robi to przy zapisie TForm.

edytowany 1x, ostatnio: mwis, 2019-09-06 16:07

Pozostało 580 znaków

2019-09-06 16:02
kq
1

Pomijając już XY, w czym problem? Podmieniasz #(\d+) na char32_t(std::stoi(match[1])) (albo wchar_t) i tyle...


edytowany 2x, ostatnio: kq, 2019-09-06 16:04

Pozostało 580 znaków

2019-09-06 17:32
1

przez te 7h to byś napisał taką funkcję w 20 językach...


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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