Witam!
Znów muszę się zwrócić do was o pomoc :)
Tym razem sprawa się wiąże z dekodowanie UTF8 do ANSI w moim programie. Używam Delphi 7 Personal.
Najlepiej pokaże na przykładzie ;)
Stworzyłem sobie 3 testowe pliczki które mają nazwy zawierające znaki dialektyczne (Polski, Rosyjski i chyba Chiński ;P).
Owe pliczki kopiuję na kartę SD mojego telefonu.
No i tu zaczyna się problem bo gdy sczytuję pliki z telefonu moim programem te nazwy się wykrzaczają. Jest tak dla tego że dane z telefonu pobieram po przez Pipy, łącząc się z shellem telefonu. Telefon jest z systemem operacyjnym Android, jest to system oparty na Linuxie, a co za tym idzie, zwracane przez niego info do shella jest w UTF8.
Jeżeli sczytam dane bez żadnej konwersji to wygląda to tak:
Natomiast gdy posłużę się funkcją UTF8ToAnsi wygląda to tak :/ :
Co zrobić aby ta konwersja zadziałała poprawnie?
Mój fragment kodu wygląda tak:
var
StdOutPipeRead: THandle;
bResult: Boolean;
Buffer: array[0..255] of Char;
BytesRead: Cardinal;
// ...
if WaitForResult then begin
repeat
bResult := ReadFile(StdOutPipeRead, Buffer, 255, BytesRead, nil);
if BytesRead > 0 then begin
Buffer[BytesRead] := #0;
// FResult jest po prostu Stringiem
FResult := FResult + UTF8ToAnsi(Buffer);
end;
until not(bResult) or (BytesRead = 0);
end;
// ...
Czy mógł by mi ktoś wyjaśnić czemu to nie działa? Może coś robię źle?
Pozdrawiam!
P.S. Jak mi pomożesz to możesz liczyć oczywiście na moją dźwięczność, ale również na dźwięczność tysięcy użytkowników mojej darmowej aplikacji ;)