Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Polskie znaki w nazwach plików (Windows) (Lazarus 0.9.28)

263 views
Skip to first unread message

admi...@gmail.com

unread,
Dec 21, 2009, 1:15:27 PM12/21/09
to
Witam,

Piszę ponieważ dotyka mnie dość poważny problem hamujący rozwój prac,
mianowicie nie mogę uporać sobie z polskimi znakami w nazwach plików
pobieranych przez Opendialog (dotyczy to zarówno file jak i image).


Wykonuję następujący kod aby przypisać do zmiennej typu string o
nazwie zdjęcie ścieżkę do zaznaczonego pliku :

if OpenPictureDialog1.Execute then //coś tam zrobiło
begin
zdjecie:=OpenPictureDialog1.FileName;
end

Następnie dodaję plik do strumienia w oparciu o jego nazwę pobraną
uprzednio.

Stream.AddFile( 'nieistotne', zdjecie, 'nieistotnymimetype' );


W linuksie, bez problemu akceptuje polskie znaki.
Mogę podać mu plik /home/ja/żźćąśę.jpg, wczyta bez problemów i doda
do strumienia.

Postanowiłem przenieść aplikację pod Windows XP SP3, kompilowane na
tej samej wersji Lazarusa.

W wypadku polskich znaków w nazwie pliku np
c:\ðśą.jpg , wyrzuca "Unable to open file xxx".
http://www.bankfotek.pl/view/479548

Jeżeli przekazuje np c:/test.jpg , nie ma żadnych problemów...

Dodam że powyższy napis, zawiera poprawną pisownię i nasze znaki.

Nie wiem gdzie szukać błędu, czy ma ktoś jakieś propozycje ?


pozdrawiam
Marek Karpowicz

Terrmit

unread,
Dec 21, 2009, 1:45:22 PM12/21/09
to
W dniu 21.12.2009 19:15, Admi...@gmail.com pisze:
> Witam,
>
[ciach]

>
> W wypadku polskich znaków w nazwie pliku np
> c:\ðśą.jpg , wyrzuca "Unable to open file xxx".
> http://www.bankfotek.pl/view/479548
>
> Jeżeli przekazuje np c:/test.jpg , nie ma żadnych problemów...
>[ciach]

Prawdopodobnie gdzieś zostaje przeinaczona ta nazwa pliku
na skutek nieprawidłowej konwersji kodowania znaków.

Ja bym sprawdził, na przykładzie kontrolki TSavePictureDialog
jaką nazwę będzie miał plik na dysku, gdy jako FileName
podasz mu np. zażółć_gęślą_jaźń.jpg

Może to coś rozjaśni co się dzieje z kodowaniem.

Sławek

admi...@gmail.com

unread,
Dec 21, 2009, 5:25:05 PM12/21/09
to
On 21 Gru, 19:45, Terrmit <terrm...@poczta.onet.pl> wrote:
> W dniu 21.12.2009 19:15, Admin...@gmail.com pisze:

Witaj,

Problem rozwiązany, ale jak do tego doszedłem...

Męczyła mnie kwestia tej kontrolki otwierania i okazało się że to nie
w niej bezpośrednio leży błąd.

Ona zwraca nam poprawną nazwę (jak na Windows-a), ale prawdopodobnie
tj na 99% biblioteka IdMultipartFormData nie obsługuje "Windowsowego
typu znaków".


Dla testu wprowadziłem mu następujący kod:
Stream.AddFile( 'zdjecie', 'c:\Ziółma.jpg', 'content-type_here' );

- wykonanie zakończyło się błędem, brak pliku "c:\Ziółma.jpg".

Kolejna próba, zastępując polskie znaki poprzez ich odpowiedniki ASCII

Stream.AddFile( 'zdjecie', 'c:\Zi'+chr(243)+chr(179)+'ma.jpg',
'content-type_here' );

- Próba zakończyła się sukcesem.

W związku z powyższym rozwiązaniem okazał się następujący kod:

zdjecie:=OpenPictureDialog1.FileName;
zdjecie:=Utf8ToAnsi(zdjecie);

0 new messages