Hallo, Wie kann ich möglichst einfach und möglichst plattform-übergreifend das Encoding für die Programme setzten, die per `subprocess.Popen` (und Familie) aufgerufen werden? Ist es ausreichend, den Parameter /universal_newlines/ zu setzen? (Der berücksichtigt /locale.getpreferredencoding/)? Für Python-Programme könnte ich schlicht PYTHONIOENCODING=UTF-8 setzen. Hintergrund: in PyInstaller rufen wir teilweise externe Programme auf, z.B. um den Pfad für Libraries zu ermitteln. Mit Python 3 kommt nun ans Licht, dass wir uns hier lange um das "richtige" decoding der gelesenen Daten herumgedrückt haben. -- Schönen Gruß Hartmut Goebel Dipl.-Informatiker (univ), CISSP, CSSLP Information Security Management, Security Governance, Secure Software Development Goebel Consult, Landshut http://www.goebel-consult.de Blog: http://www.goebel-consult.de/blog/kleiner-erfahrungsbericht-mit-online-ocr-d... Kolumne: http://www.cissp-gefluester.de/2010-09-mut-zur-beschraenkung
Am 19.05.2015 um 14:46 schrieb Hartmut Goebel:
Ist es ausreichend, den Parameter /universal_newlines/ zu setzen? (Der berücksichtigt /locale.getpreferredencoding/)?
Die Frage muss ich präzisieren: Für Python3 *könnte* das m.E. funktionieren. Aber bei Python 2 wird getpreferredencodingnicht benutzt. -- Schönen Gruß Hartmut Goebel Dipl.-Informatiker (univ), CISSP, CSSLP Information Security Management, Security Governance, Secure Software Development Goebel Consult, Landshut http://www.goebel-consult.de Blog: http://www.goebel-consult.de/blog/kleiner-erfahrungsbericht-mit-online-ocr-d... Kolumne: http://www.cissp-gefluester.de/2010-09-mut-zur-beschraenkung
Hallo, Martin von Löwis weiss dazu wahrscheinlich alles, aber meine Antwort wäre: gar nicht, und erst recht nicht plattformübergreifend. Denn die stream-APIs der Betriebssysteme kennen das nicht - die sind byte-orientiert. Das einzige was da existiert ist eine Reihe von Heuristiken und Vereinbarungen. Ob die respektiert werden fuer die Programme, die du aufrufst - das weiss der Himmel. Oder Jibbers, der feuerspeiende Riesenhummer auf dem Saturn. Wahrscheinlich sind eine ganze Reihe von unixoiden Programmen respektieren die LC_*-Umgebungsvariablen. Windows kennt wide-characters, aber ob die sich auf std* beziehen, weiss ich nicht. Dafür ist unter Windows AFAIK das Filesystem-Encoding immer bekannt bzw. es sind immer wide-character-Pfade, wohingegen unix-filesysteme nur Bytenamen kennen, und welchem Encoding die gehorchen ist per Konvention definiert, kann aber auch ignoriert werden. Langer Rede kurzer sinn: du wirst experimentieren muessen, was die konkret verwendeten Programme tun. HTH, Diez
On 19 May 2015, at 14:46, Hartmut Goebel
wrote: Hallo,
Wie kann ich möglichst einfach und möglichst plattform-übergreifend das Encoding für die Programme setzten, die per `subprocess.Popen` (und Familie) aufgerufen werden? Ist es ausreichend, den Parameter universal_newlines zu setzen? (Der berücksichtigt locale.getpreferredencoding)?
Für Python-Programme könnte ich schlicht PYTHONIOENCODING=UTF-8 setzen.
Hintergrund: in PyInstaller rufen wir teilweise externe Programme auf, z.B. um den Pfad für Libraries zu ermitteln. Mit Python 3 kommt nun ans Licht, dass wir uns hier lange um das "richtige" decoding der gelesenen Daten herumgedrückt haben.
-- Schönen Gruß Hartmut Goebel Dipl.-Informatiker (univ), CISSP, CSSLP Information Security Management, Security Governance, Secure Software Development Goebel Consult, Landshut http://www.goebel-consult.de http://www.goebel-consult.de/ Blog: http://www.goebel-consult.de/blog/kleiner-erfahrungsbericht-mit-online-ocr-d... http://www.goebel-consult.de/blog/kleiner-erfahrungsbericht-mit-online-ocr-d... Kolumne: http://www.cissp-gefluester.de/2010-09-mut-zur-beschraenkung http://www.cissp-gefluester.de/2010-09-mut-zur-beschraenkung_______________________________________________ python-de maillist - python-de@python.org https://mail.python.org/mailman/listinfo/python-de
participants (2)
-
Diez B. Roggisch
-
Hartmut Goebel