Kodowanie znaków w TStringGrid

Kodowanie znaków w TStringGrid
BU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 297
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ć??

flowCRANE
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tuchów
  • Postów: 12269
0

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

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

BU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 297
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ć?

flowCRANE
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tuchów
  • Postów: 12269
0

Która wersja Delphi?

BU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 297
0

No niestety Turbo Delphi.

flowCRANE
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tuchów
  • Postów: 12269
0

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

BU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 297
0

A jak to sprawdzić?

  • Rejestracja: dni
  • Ostatnio: dni
0

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

BU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 297
0

Tylko w TD raczej tego nie zainstaluję. Heh.

GS
  • Rejestracja: dni
  • Ostatnio: dni
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

BU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 297
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??

GS
  • Rejestracja: dni
  • Ostatnio: dni
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

flowCRANE
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tuchów
  • Postów: 12269
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ć.

GS
  • Rejestracja: dni
  • Ostatnio: dni
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

flowCRANE
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tuchów
  • Postów: 12269
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.

GS
  • Rejestracja: dni
  • Ostatnio: dni
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

BU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 297
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. ;)

flowCRANE
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tuchów
  • Postów: 12269
1

Wykorzystaj TEncoding.

BU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 297
0

Chyba nie za bardzo wiem jak. ;)

GS
  • Rejestracja: dni
  • Ostatnio: dni
1

@Buster:
przykład ....

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

end;
BU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 297
0

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

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.