Kodowanie znaków w TStringGrid

0

Witam.
Podpowiedzcie jak ugryźć temat. Jest sobie plik zakodowany w UTF-8. W pliku znajdują się specyficzne znaki (umlauty niemieckie). Jak odczytuję zawartość i umieszczam w TStringGrid, to są krzaczki w tych miejscach. Jak to poprawnie odczytać, a potem jeszcze zapisać??

0

UTF-8 Conversion Routines - to powinno być pomocne.

Wczytaj dane jako AnsiString, następnie przekonwertuj ciąg do typu używanego w VCL.

0

Generalne zadziałało. Fajnie. Ale pojawił mi się kolejny problem. W pliku są fragmenty zapisane ........ cyrilicą, czy też innym krojem. Po zastosowaniu funkcji konwertującej, zamiast znaczków są znaki zapytania. Jak to rozwiązać?

0

Która wersja Delphi?

0

No niestety Turbo Delphi.

0

Nie znam kompletnie tego środowiska. W sumie to nieistotne. Komponenty obsługują unicode, czy tylko ansi?

0

A jak to sprawdzić?

0

Nie ma co sprawdzać, niestety nie obsluguje UNICODE.
Może spróbuj TNT Unicode Controls.

0

Tylko w TD raczej tego nie zainstaluję. Heh.

1

@furious programming: @Buster
Turbo Delphi pojawiło się w 2006 roku a z tego co wiem to obsługa UNICODE pojawiła się dopiero w D2009 , więc nie sądzę aby Turbo Delphi natywnie wspierało to kodowanie

0

Mam w TD funkcję UTF8ToUnicode. Ale za Chiny zjednoczone z Hong Kongiem nie wiem jak z niej skorzystać. Help w tej kwestii jest bardzo ubogi.
Ok.
Czy temat jest do ugryzienia??

0

@Buster:
to może przenieś projekt do Lazarusa (Free Pascala). Wydaje mi się że darmowy Free Pascal wspiera UNICODE, ale od Lazarusa i Free Pascala ekspertem jest @furious programming i jego warto było by zapytać
Myślę że warto było by zmienić nieco archaiczne narzędzie jakim jest Turbo Delphi na coś nowszego

0

@grzegorz_so: biblioteka komponentów Lazarusa natywnie obsługuje unikod pod postacią UTF-8, więc załadowanie zawartości pliku do kontrolek nie wymagałoby żadnych konwersji i innych dodatkowych czynności :]

Jeśli jest możliwość przeniesienia tego projektu do innego środowiska to warto się zastanowić. Wszystko zależy od tego, czy to projekt rozwijany prywatnie czy w pracy.

@Buster: poprzednik zdołał określić, że komponenty w tym środowisku nie obsługują unikodu. W stronie kodowej Windows 1250 są znaki niemieckie, więc powinieneś przekonwertować ciąg z UTF-8 do Ansi. Znajdź funkcję UTF8ToAnsi i spróbuj jej użyć.

0

@furious programming:
ale autor postu wspomniał również o problemach z cyrlicą, więc tylko UNICODE równocześnie poradzi sobie i z cyrylicą i umlautami. Strony kodowe WINxxxx oparte o ośmobitowe kodowanie znaków nie rozwiążą problemu w sposób uniwersalny

0

@grzegorz_so: Poniekąd można by wspierać zagraniczne języki, mieszczące się w którejś 8-bitowej stronie kodowej (np. Win1250), jednak ograniczenia będą bardzo duże. Tak więc idealnego, natywnego dla tego środowiska rozwiązania raczej nie ma, chyba że pakiet kontrolek firm trzecich.

Co w dalszym ciągu nie zmienia faktu, że mamy 2017 rok, a nie 1997 i środowisko programistyczne nie wspierające unikodu to duża przeszkoda. Lazarus bez problemu obsłuży ~dowolny język, również cyrylicę. Tę sprawdzałem już dawno temu, przy okazji prac nad swoim formatem i biblioteką do jego obsługi.

0

@furious programming:
przerabiałem to bo mam czterojęzyczną aplikację, polski,słowacki, niemiecki i ukraiński, dopiero użycie UNICODE rozwiązało niemal wszystkie problemy językowe

0

Wróciłem do pierwotnej wersji źródła mojej aplikacji napisanej w Delphi 10.1. Z UTF-8 do Unicode-u bardzo ładnie sobie poradził. W TStringGrid wyświetla wszystko prawidłowo tj. umlauty, akcenty i nawet cyrylicę.
A jak zapisać teraz zawartość tego grida do pliku? Ale oczywiście tak, żeby zachowały się te wszystkie dziwne znaczki. ;)

1

Wykorzystaj TEncoding.

0

Chyba nie za bardzo wiem jak. ;)

1

@Buster:
przykład ....

procedure savetofile(aFilename:string);
var
  lTs: tstringlist;
begin
  lTs := tstringlist.Create;
  try
    lTs.add('Відобразити');
    lTs.SaveToFile(aFilename, tEncoding.UTF8);
  finally
    lTs.Free;
  end;

end;
0

Wszystko działa. Wielkie dzięki wszystkim za okazaną pomoc. :)

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