Verstümmelte Python-Zeichen in der Windows + Git Bash-Umgebung

Bequemes Bash mit Git Bash und Cmder Als ich versuchte, mein Leben zu beginnen, war Python verstümmelt.

$ python -c "print('japanisch')"
譌 ・ 譛 ャ 隱 隱

Fazit

Fügen Sie also die folgenden zwei Zeilen zu .bashrc hinzu.

.bashrc


chcp.com 65001
export PAGER=less

Das ist alles für die Schlussfolgerung, aber ich werde den Hintergrund dazu überlassen.

Problem 1: Verstümmelte Charaktere

$ python -c "print('japanisch')"
譌 ・ 譛 ャ 隱 隱

Umfrage

Ich habe so viele Bestätigungsbefehle für die Zeichencodierung eingegeben, wie ich mir vorstellen konnte.

$ echo $LANG
ja_JP.UTF-8
$ echo $PYTHONIOENCODING
utf-8
$ python -c "import sys; print(sys.stdout.encoding)"
utf-8
$ python -c "import sys; print(sys.getdefaultencoding())"
utf-8
$ python -c "import locale; print(locale.getpreferredencoding(False))"
cp932

Es gibt fast UTF-8 zurück. Nur "locale.getpreferredencoding ()" antwortete wie cp932, aber laut Documentation ist dies:

Gibt zurück, wie Textdaten basierend auf Benutzereinstellungen codiert werden. Diese Funktion ist nur eine Vermutung **, da die Benutzereinstellungen zwischen verschiedenen Systemen unterschiedlich ausgedrückt werden und auf einigen Systemen möglicherweise nicht programmgesteuert verfügbar sind.

Es ist nicht so verdächtig. Dabei fand ich die folgende Beschreibung in der Dokumentation von sys.stdout:

Die Zeichenkodierung ist plattformabhängig. ** Wenn der Stream unter Windows interaktiv ist (wenn die isatty () -Methode True zurückgibt), lautet die Konsolencodepage **, andernfalls wird die ANSI-Codepage verwendet. Andere Plattformen verwenden die Gebietsschemacodierung (siehe locale.getpreferredencoding ()).

Codepage ...!

Aktion: Codepage ändern

Ich habe gegoogelt, weil ich die Codepage nicht kannte. Es scheint mit dem Befehl chcp eingestellt zu sein. Selbst von Git Bash aus können Sie den Pfad mit dem Erweiterungsnamen "chcp.com" aufrufen, wenn sich der Pfad in "/ C / windows / system32" befindet.

$ chcp.com          #Codepage-Bestätigung
Aktuelle Codepage: 932
$ chcp.com 65001    #Codepage-Einstellungen(UTF-8)
$ python -c "print('japanisch')"
japanisch

Es war in Ordnung und ich habe die verstümmelten Charaktere losgeworden.

Problem 2: Hilfe beim Anzeigen des Fehlers

Ich kann in Python keine Hilfe bekommen. Es wird als "Nicht genügend Speicher" angezeigt.

>>> import sys
>>> help(sys.argv)
Not enough memory.

Umfrage

Es scheint, dass Windows more.com unter der Umgebung von chcp 65001 nicht gut funktioniert. Wenn der Inhalt, den Sie anzeigen möchten, mehrere Seiten umfasst, wird "--Mehr (40%) -" oder etwas angezeigt, das Sie zur Eingabe eines Schlüssels auffordert. Eine solche Funktion wird als Pager bezeichnet.

Unter Linux spielt normalerweise der Befehl "less" diese Rolle. Ich möchte "less.exe" anstelle von "more.com" verwenden, das nicht mehr verfügbar ist!

Korrekturmaßnahme: Pager wechseln

Es scheint, dass Python es verwenden wird, wenn Sie es in der Umgebungsvariablen PAGER angeben. Ich konnte keine Erwähnung von Pagern in der Dokumentation finden. Ist es selbstverständlich oder ist es eine andere Funktion als Python?

$ export PAGER=less
$ python
>>> import sys
>>> help(sys.argv)  #Ab hier wird unten auf dem Bildschirm weniger angezeigt, sodass der Python-Interpreter einmal ausgeblendet wird
Help on list object:

class list(object)
 |  list() -> new empty list
 |  list(iterable) -> new list initialized from iterable's items
 |
 |  Methods defined here:
 |
...

Herzlichen Glückwunsch Hilfe ist zurück. Diesmal habe ich es in der Hilfeanzeige von Python bemerkt, aber andere Leute, die more.com verwenden, werden wahrscheinlich auf dasselbe Problem stoßen. Selbst in diesem Fall kann es etwas geben, das mit "export PAGER = less" gelöst werden kann.

Beiseite

getpreferredencoding nicht gut genug

Versuchen Sie erneut, locale.getpreferredencoding () mit aufgelöster Auflösung auszuführen.

$ python -c "import locale; print(locale.getpreferredencoding(False))"
cp932

Immerhin ist die Erfassung durch "getpreferredencoding" nicht gut genug.

cmd /? wird englisch

Wenn "chcp 65001" gesetzt ist, wird das Ergebnis von "cmd /?" In Englisch angezeigt. Wenn Sie cmd /? Starten, wird Japanisch angezeigt.

Referenz: [Eingabeaufforderung / Umschaltmethode im englischen Modus / im japanischen Modus / chcp - Leben unter Windows](http://win.just4fun.biz/%E3%82%B3%E3%83%9E%E3%83%B3%] E3% 83% 89% E3% 83% 97% E3% 83% AD% E3% 83% B3% E3% 83% 97% E3% 83% 88 /% E8% 8B% B1% E8% AA% 9E% E3 % 83% A2% E3% 83% BC% E3% 83% 89% E3% 83% BB% E6% 97% A5% E6% 9C% AC% E8% AA% 9E% E3% 83% A2% E3% 83 % BC% E3% 83% 89% E3% 81% AE% E5% 88% 87% E3% 82% 8A% E6% 9B% BF% E3% 81% 88% E6% 96% B9% E6% B3% 95 % E3% 83% BBchcp.html)

PAGER Begleiter

Es scheint, dass die Umgebungsvariable GIT_PAGER auch in git verwendet werden kann.

Geschichte

27.09.2016 Beschrieben über chcp 2016/10/09 Hinzugefügt über PAGER

Recommended Posts

Verstümmelte Python-Zeichen in der Windows + Git Bash-Umgebung
Python Windows-Umgebung
Verwenden von venv in der Windows + Docker-Umgebung [Python]
Aufbau einer VScode-Umgebung (Windows 10, Python, C ++, C, Git)
Entwicklungsumgebung in Python
Aufbau einer Python-Umgebung (Windows 10 + Emacs)
Behandeln Sie Umgebungsvariablen in Python
Erstellen Sie eine Python-Umgebung unter Windows
Erstellen Sie eine Python-Umgebung mit Windows
Wrapping von Git-Operationen in Python
Erstellen einer Python-Umgebung unter Windows 7
Python-Installation in 2 Zeilen @Windows
Verwenden Sie httpie von Windows Git Bash
[Python] Mit Tkinter mehrere Fenster anzeigen
Python-Umgebungskonstruktionsnotiz unter Windows 10
Drücken Sie einen Befehl in Python (Windows)
Aufbau einer Anaconda-Python-Umgebung unter Windows 10
Setzen Sie MeCab in "Windows 10; Python3.5 (64bit)"
Python2.7-Installation in einer Windows 32-Bit-Umgebung
Installieren Sie Scrapy in einer Python Anaconda-Umgebung
Verschiedene Anaconda-Einstellungen in der Windows 10-Umgebung
[Python3] Aufbau der Entwicklungsumgebung << Windows Edition >>
Windows 10: Installieren der MeCab-Bibliothek für Python
Installieren Sie Tensorflow in einer anaconda + python3.5-Umgebung
Installieren Sie die Python-Entwicklungsumgebung unter Windows 10
Analysieren Sie das Git-Commit-Protokoll in Python
UnicodeDecodeError tritt in pip auf (Windows-Umgebung)
Wettbewerb mit VS-Code Erstellen Sie eine Python-Umgebung für Profis unter Windows
Mausbedienung mit Windows-API in Python
Build-Umgebung für Python 2.7, 3.4, 3.5-Erweiterungsmodule unter Windows
Konstruktionsverfahren für die Python-Projektumgebung (für Windows)
[Python] [Windows] Serielle Kommunikation in Python über DLL
[Python] [Windows] Machen Sie eine Bildschirmaufnahme mit Python
Richten Sie Pipenv auf Pycharm in einer Windows-Umgebung ein
Erstellen von Scicit-Learn in einer Windows 10-Umgebung mit Pycharm
Verweisen auf Umgebungsvariablen in Python in Blender
Starten Sie den Python-Interpreter über Git Bash
Windows Qt5.4 Python3.4 QProcess Japanische verstümmelte Zeichen
Erstellen einer Python-Entwicklungsumgebung für Windows + gVim + Poetry
Einführung von sip-4.14 in der Python3.2.2-Umgebung mit MacOS 10.7.4
Bereiten Sie eine Python-Entwicklungsumgebung für jedes Projekt in einer Windows-Umgebung vor (VSCode + virtualEnvWrapper + Pylint).
[Python] Grund für den Typ "int32" in Numpy (Windows-Umgebung) (Stand September 2020)
Quadtree in Python --2
Python in der Optimierung
CURL in Python
Metaprogrammierung mit Python
Erstellen Sie in 1 Minute eine Vim + Python-Testumgebung
Python 3.3 mit Anaconda
Geokodierung in Python
SendKeys in Python
Lesen Sie eine Datei mit verstümmelten Linien in Python
Metaanalyse in Python
Lassen Sie uns das Git-Commit-Protokoll in Python analysieren!
Erstellen einer Umgebung, die Python mit Eclipse verwendet
Ich möchte Python in der Umgebung von pyenv + pipenv unter Windows 10 verwenden
Python-Umgebungseinstellungen