XbZLib liefert falsche Umlaute [Erledigt]

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
lesny
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 26
Registriert: Di, 03. Nov 2009 23:16

XbZLib liefert falsche Umlaute [Erledigt]

Beitrag von lesny »

Ich versuche das Packen von Dateien mit XbZLib zu realisieren. Prinzipiell funktioniert alles, aber die Umlaute der Dateinamen im ZIP-File sind verhunzt.
Die Datei Grünfläche.jpg heißt im ZIP Gr³nflõche.jpg
Mein Programm setzt anfangst SET CHARSET TO ANSI.
Ich habe auch versucht, vor dem Aufruf des XbZLib-Packvorgangs auf SET CHARSET TO OEM umzustellen, bringt gleiches falsches Ergebnis. Wo kann ich nach dem Fehler suchen, bzw. den richtigen Zeichensatz einstellen?
Zuletzt geändert von lesny am Mi, 06. Mär 2019 14:27, insgesamt 1-mal geändert.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: XbZLib liefert falsche Umlaute

Beitrag von AUGE_OHR »

moin,
lesny hat geschrieben: Sa, 02. Mär 2019 23:42 Die Datei Grünfläche.jpg heißt im ZIP Gr³nflõche.jpg
das ist ANSI -> OEM ...

woher kommen deine Dateinamen die in das ZIP File sollen :?:
wenn du von Bildern sprichst liegen die vermutlich auf einem Datenträger oder hast du die in einer Datenbank :?:

Code: Alles auswählen

ConvToAnsiCP()
ConvToOEMCP()
sind die beiden Befehle um Zeichensatz umwandeln.
gruss by OHR
Jimmy
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: XbZLib liefert falsche Umlaute

Beitrag von ramses »

Hallo Lesny

das ist kein einfaches Problem.

Ich kenne das auch.

Auf die schnelle gibt es nur eine wirklich funktionierende Lösung: ändere die Filenamen vor dem Packen so dass du keine Umlaute mehr im Namen hast.

Das Problem kommt aus der verwendeten Structure Klassen aus ot4xb genauer dem Member:

Code: Alles auswählen

VARLEN EXTRA MEMBER FileName        SIZE TO FNameLen		// File Name
dieser wird beim ausführen mit

Code: Alles auswählen

#xcommand VARLEN EXTRA MEMBER <cc> SIZE TO <sz> =>  ;
            DYNAMIC  VAR   __<cc> ;
          ; DYNAMIC  PROPERTY <cc> ;
                     READ iif(::__<cc> == NIL,"", ::__<cc>) ;
                     WRITE ( ::<sz> := Len(v) , ::__<cc> := v ) ;
          ; _cgb_ += cPrintf(" + s:%s",<(cc)>) ;
          ; _cpb_ += cPrintf("s:__%s := PeekStr(@v,@nn,s:%s ),", <(cc)> , <(sz)>) ;
          ; _cfr_ += cPrintf("s:__%s := ChrR(0,s:%s),FRead(h,@s:__%s,s:%s),",<(cc)>,<(sz)>,<(cc)>,<(sz)>) ;
          ; _vls_ += cPrintf(" + s:%s ",<(sz)>) ;
umgesetzt.
The types C, n, p, and S, and the behavior of c and s with printf functions, are Microsoft extensions and are not ANSI compatible.
Was soviel heisst dass diese Memberklasse kein ANSI beherscht. Was du an deinen verhundsten Filenamen siehst. Du kannst jetzt vor dem schreiben in diese Stuktur den Filenamen von ANSI in OEM umwandeln, so kannst du mit eine geänderten Zeile Code neue Zip Files erstellen. Wenn du aber auch Zipfiles updaten oder entpacken usw. willst werden die änderungen sehr aufwendig.

Vielleicht hätte ja Pablo obies auch ANSI komatibel oder du ändert das Kommando selbst .....


Gruss Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
lesny
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 26
Registriert: Di, 03. Nov 2009 23:16

Re: XbZLib liefert falsche Umlaute

Beitrag von lesny »

AUGE_OHR hat geschrieben: So, 03. Mär 2019 9:30 moin,
lesny hat geschrieben: Sa, 02. Mär 2019 23:42 Die Datei Grünfläche.jpg heißt im ZIP Gr³nflõche.jpg
das ist ANSI -> OEM ...

woher kommen deine Dateinamen die in das ZIP File sollen :?:
wenn du von Bildern sprichst liegen die vermutlich auf einem Datenträger oder hast du die in einer Datenbank :?:

Code: Alles auswählen

ConvToAnsiCP()
ConvToOEMCP()
sind die beiden Befehle um Zeichensatz umwandeln.
Die Dateien liegen auf einem Datenträger. Ich übergebe an XbZLib einen Ordner und er soll alles zippen, was in diesem Ordner liegt. Insofern kann ich hier gar nicht direkt eingreifen und Dateinamen umwandeln. Ich werde mit die Antwort von ramses aufgreifen und weiter testen.
Benutzeravatar
lesny
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 26
Registriert: Di, 03. Nov 2009 23:16

Re: XbZLib liefert falsche Umlaute

Beitrag von lesny »

Hallo Carlo,
ramses hat geschrieben: So, 03. Mär 2019 11:09 Was soviel heisst dass diese Memberklasse kein ANSI beherscht. Was du an deinen verhundsten Filenamen siehst. Du kannst jetzt vor dem schreiben in diese Stuktur den Filenamen von ANSI in OEM umwandeln, so kannst du mit eine geänderten Zeile Code neue Zip Files erstellen. Wenn du aber auch Zipfiles updaten oder entpacken usw. willst werden die änderungen sehr aufwendig.

Vielleicht hätte ja Pablo obies auch ANSI komatibel oder du ändert das Kommando selbst .....
Gruss Carlo
Perfekt. Da ich nur Dateien in ein neues ZIP packen will, reicht mir das. Funktioniert wie gewünscht. Habe nur eine Zeile Code geändert, und zwar in

Code: Alles auswählen

Method XbZLibZip:AddData(cFileName, lStream, cFullName, nFSize, cFTime, cFAttr, cComment, lStoreIt, cBuffer)
diese Änderung:

Code: Alles auswählen

oCDRec:FileName            := ConvToOEMCP(cFName) // cFName
Vielen Dank!
Gruß Stefan
Antworten