Path: csiph.com!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Hermann Riemann Newsgroups: de.comp.lang.python Subject: Re: for unpacking Date: Tue, 13 Aug 2024 19:36:26 +0200 Lines: 65 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit X-Trace: individual.net zfGaM2UJNQfuQEHqDlQJ0QoJ6fFsU5ZdQFZ+5B5WVlSApw0Zmi Cancel-Lock: sha1:ns2atWUO2BoYBs9LX/5nWxaMKEQ= sha256:NAksht/7a446/smsfSzSzBYNDQRrZi+Jdis8Bfns1rc= User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.2.1 In-Reply-To: Content-Language: de-DE Xref: csiph.com de.comp.lang.python:6200 Am 13.08.24 um 13:16 schrieb Stefan Ram: > Hermann Riemann schrieb oder zitierte: >> Python macht z.B. Probleme in os.walk bei ISO in Dateinamen. > > Unter Linux ist heute UTF-8 die Standardkodierung. Mit > Systemvariablen wie "LANG" oder "LC_CTYPE" könnte man dies > vielleicht umstellen. > > Es dürfte Probleme bereiten, falls auf einem System Dateinamen > mal in UTF-8 und mal in ISO-8859-1 kodiert sind. Einfacher ist > es vielleicht, alle auf UTF-8 umzustellen oder wenigstens die > Bereiche irgendwie voneinander zu trennen. Inden Anfangszeiten von UTF-8 haben Editoren manchmal UTF-8, manchmal ISO abgesetzt. Das Ergebnis waren Dateien, in denen ISO und UTF-8 gemischt waren. Mit einem C Programm habe ich das reparieren können, da die in ISO verwendete ä ö ü etc keinem utf-8 entsprachen. > Python verläßt sich bei der Interpretation von Dateinamen wohl > zunächst auf die Angaben des Betriebssystems. Es ist vielleicht > schwierig, von Python aus die nicht-interpretierten Oktette eines > Dateinamens zu erhalten. Dadurch ist die Arbeit mit Dateinamen > bei gemischten Codierungen in Python manchmal schwierig! Wen Namen entweder ISO oder UTF-8 sind kann mit try und Umkodierung bei except das Problem gelöst werden. Wenn Python keine ISO Dateinamen kann, kann mit C nachgeholfen werden. Oder über GUI. Die Kommandooberfläche ist auch allergisch gegen ISO. Nach meiner Erinnerung dürfen Dateinamen in Unix alle Werte außer '\0' und '/' erhalten. Probiere folgendes. Lege das Verzeichnis test z.B. unter tmp an Übersetze in /tmp folgendes Programm und führe a.out aus. Dann wechsele nach /tmp/test und habe viel Spaß mit Kommandos. #include #include void xopen(char *name){ char buf[60]; sprintf(buf,"test/%s",name); char *p; FILE *f; printf("%s\n",name); for (p=name;*p;p++) printf("%2X ",*p); printf("\n"); f=fopen(buf,"w"); fprintf(f," "); fclose (f);} int main(){ int i; char buf[60]; xopen("\"\';\\ @&"); buf[0]='_'; for (i=1;i<60;i++) buf[i]=0; for (i=1;i<33;i++) buf[i]=i; xopen(buf); printf("fertig\n"); return 0;} --