🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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)
#92932
Author: AdminOPZ
Date: Mon, 21 Dec 2009 18:15
41 lines
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)
#92933
Author: Terrmit
Date: Mon, 21 Dec 2009 18:45
22 lines
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)
#92934
Author: AdminOPZ
Date: Mon, 21 Dec 2009 22:25
55 lines
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