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ć??
- Rejestracja:ponad 22 lata
- Ostatnio:minuta
- Postów:296
UTF-8 Conversion Routines - to powinno być pomocne.
Wczytaj dane jako AnsiString, następnie przekonwertuj ciąg do typu używanego w VCL.
- Rejestracja:ponad 14 lat
- Ostatnio:około 10 godzin
@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
- Rejestracja:ponad 22 lata
- Ostatnio:minuta
- Postów:296
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??
- Rejestracja:ponad 14 lat
- Ostatnio:około 10 godzin
@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
@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ć.
- Rejestracja:ponad 14 lat
- Ostatnio:około 10 godzin
@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

@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.
- Rejestracja:ponad 14 lat
- Ostatnio:około 10 godzin
@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

- Rejestracja:ponad 22 lata
- Ostatnio:minuta
- Postów:296
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. ;)
- Rejestracja:ponad 22 lata
- Ostatnio:minuta
- Postów:296
Chyba nie za bardzo wiem jak. ;)
- Rejestracja:ponad 14 lat
- Ostatnio:około 10 godzin
@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;
- Rejestracja:ponad 22 lata
- Ostatnio:minuta
- Postów:296
Wszystko działa. Wielkie dzięki wszystkim za okazaną pomoc. :)
