Thread View: pl.comp.lang.pascal
3 messages
3 total messages
Started by AdminOPZ
Mon, 21 Dec 2009 18:15
Polskie znaki w nazwach plików (Windows) (Lazarus 0.9.28)
Author: AdminOPZ
Date: Mon, 21 Dec 2009 18:15
Date: Mon, 21 Dec 2009 18:15
41 lines
2489 bytes
2489 bytes
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
Re: Polskie znaki w nazwach plików (Windows) (Lazarus 0.9.28)
Author: Terrmit
Date: Mon, 21 Dec 2009 18:45
Date: Mon, 21 Dec 2009 18:45
22 lines
1638 bytes
1638 bytes
W dniu 21.12.2009 19:15, AdminOPZ@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
Re: Polskie znaki w nazwach plików (Windows) (Lazarus 0.9.28)
Author: AdminOPZ
Date: Mon, 21 Dec 2009 22:25
Date: Mon, 21 Dec 2009 22:25
55 lines
2931 bytes
2931 bytes
On 21 Gru, 19:45, Terrmit <terrm...@poczta.onet.pl> wrote: > W dniu 21.12.2009 19:15, Admin...@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 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);
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads