Wo Py_FileSystemDefaultEncoding im Python-Quellcode gesetzt ist

Ich bin neugierig, wie python Quellcode den Wert von Py_FileSystemDefaultEncoding festlegt. Und ich habe eine seltsame Sache.

Da python doc über sys.getfilesystemencoding () sagte, dass:

Bei Unix ist die Codierung die Präferenz des Benutzers nach dem Ergebnis von nl_langinfo (CODESET) oder None, wenn das nl_langinfo (CODESET) fehlgeschlagen ist.

Ich benutze python 2.7.6

“ `

>>>import sys >>>sys.getfilesystemencoding() >>>'UTF-8' >>>import locale >>>locale.nl_langinfo(locale.CODESET) >>>'ANSI_X3.4-1968' 

“ `
Hier ist die Frage: Warum unterscheidet sich der Wert von getfilesystemencoding () von dem Wert von locale.nl_landinfo (), da das doc sagt, dass getfilesystemencoding () von locale.nl_landinfo () abgeleitet ist.

Hier ist die Locale-Befehlsausgabe in meinem Terminal:

 LANG=en_US.UTF-8 LANGUAGE=en_US:en LC_CTYPE="en_US.UTF-8" LC_NUMERIC=zh_CN.UTF-8 LC_TIME=zh_CN.UTF-8 LC_COLLATE="en_US.UTF-8" LC_MONETARY=zh_CN.UTF-8 LC_MESSAGES="en_US.UTF-8" LC_PAPER=zh_CN.UTF-8 LC_NAME=zh_CN.UTF-8 LC_ADDRESS=zh_CN.UTF-8 LC_TELEPHONE=zh_CN.UTF-8 LC_MEASUREMENT=zh_CN.UTF-8 LC_IDENTIFICATION=zh_CN.UTF-8 LC_ALL= 

  • Wie man eine benutzerdefinierte Tausende Trennzeichen?
  • IPython Notebook Gebietsschema Fehler [Duplikat]
  • Liste der Tupel unter Berücksichtigung des Gebietsschemas (schwedische Bestellung)
  • Set locale codierung in python
  • Python wissenschaftliche Notation mit D anstelle von E
  • Umrechnungszeichen umwandeln
  • One Solution collect form web for “Wo Py_FileSystemDefaultEncoding im Python-Quellcode gesetzt ist”

    Zusammenfassung: sys.getfilesystemencoding() verhält sich wie dokumentiert. Die Verwirrung ist auf den Unterschied zwischen setlocale(LC_CTYPE, "") (Benutzerpräferenz) und dem Standard-C-Gebietsschema zurückzuführen.


    Das Skript beginnt immer mit dem Standard-C-Gebietsschema:

     >>> import locale >>> locale.nl_langinfo(locale.CODESET) 'ANSI_X3.4-1968' 

    Aber getfilesystemencoding() verwendet das Gebietsschema des Benutzers:

     >>> import sys >>> sys.getfilesystemencoding() 'UTF-8' >>> locale.setlocale(locale.LC_CTYPE, '') 'en_US.UTF-8' >>> locale.nl_langinfo(locale.CODESET) 'UTF-8' 

    Leere Zeichenfolge als Gebietsschema-Name wählt ein Gebietsschema aus, das auf der Benutzerwahl der entsprechenden Umgebungsvariablen basiert .

     $ LC_CTYPE=C python -c 'import sys; print(sys.getfilesystemencoding())' ANSI_X3.4-1968 $ LC_CTYPE=C.UTF-8 python -c 'import sys; print(sys.getfilesystemencoding())' UTF-8 

    Wo finde ich den Quellcode zur Einstellung von Py_FileSystemDefaultEncoding.

    Es gibt zwei Plätze im Quellcode für Python 2.7:

    • bltinmodule.c gibt Py_FileSystemDefaultEncoding unter Windows und OS X an
    • Py_InitializeEx() setzt sie auf andere Unix-Systeme – Hinweis: setlocale(LC_CTYPE, "") wird vor nl_langinfo(CODESET) und es wird wieder zurückgesetzt setlocale(LC_CTYPE, saved_locale) nach.

    Können Sie mir einige Ratschläge geben, wie man einige Schlüsselwörter im Python-Quellcode durchsucht

    Um diese Orte zu finden:

    • Klon Python 2.7 Quellcode :

       $ hg clone https://hg.python.org/cpython && cd cpython $ hg update 2.7 
    • Suche nach Py_FileSystemDefaultEncoding *= regex in deinem Editor zB:

       $ make TAGS # to create tags table 

      In Emacs: Mx tags-search RET Py_FileSystemDefaultEncoding *= RET und M-, um die Suche fortzusetzen.

    Python ist die beste Programmiersprache der Welt.