Caractères Python déformés dans l'environnement Windows + Git Bash

Bash confortable avec Git Bash et Cmder Quand j'ai essayé de commencer ma vie, Python était brouillé.

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

Conclusion

Ajoutez donc les deux lignes suivantes à .bashrc.

.bashrc


chcp.com 65001
export PAGER=less

C'est tout pour la conclusion, mais je vais laisser le contexte.

Problème 1: caractères déformés

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

Enquête

J'ai tapé autant de commandes de confirmation d'encodage de caractères que je pouvais penser.

$ 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

Il renvoie presque UTF-8. Seul locale.getpreferredencoding () a répondu comme cp932, mais selon Documentation, c'est:

Renvoie comment encoder des données textuelles en fonction des paramètres utilisateur. Cette fonction n'est qu'une hypothèse **, car les paramètres utilisateur sont exprimés différemment entre les différents systèmes et peuvent ne pas être disponibles par programme sur certains systèmes.

Ce n'est pas si suspect. Ce faisant, j'ai trouvé la description suivante dans la Documentation de sys.stdout:

Le codage des caractères dépend de la plate-forme. ** Sous Windows, si le flux est interactif (si la méthode isatty () renvoie True), la page de codes de la console est **, sinon la page de codes ANSI est utilisée. D'autres plates-formes utilisent le codage des paramètres régionaux (voir locale.getpreferredencoding ()).

Page de code ...!

Action: modifier la page de codes

J'ai cherché sur Google parce que je ne connaissais pas la page de codes. Il semble être défini avec la commande chcp. Même à partir de Git Bash, si le chemin est dans / C / windows / system32, vous pouvez l'appeler avec le nom d'extension chcp.com.

$ chcp.com          #Confirmation de la page de codes
Page de code actuelle: 932
$ chcp.com 65001    #Paramètres de la page de code(UTF-8)
$ python -c "print('Japonais')"
Japonais

C'était bien et je me suis débarrassé des personnages brouillés.

Problème 2: erreur d'affichage de l'aide

Je ne peux pas obtenir d'aide en Python. Il est affiché comme "Mémoire insuffisante".

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

Enquête

Il semble que Windows more.com ne fonctionne pas bien dans l'environnement de chcp 65001. Lorsque le contenu que vous souhaitez afficher s'étend sur plusieurs pages, il affiche «--More (40%) -» ou quelque chose qui vous invite à saisir une clé. Une telle fonction est appelée un pager.

Sous Linux, la commande less joue généralement ce rôle. Je veux utiliser «less.exe» au lieu de «more.com» qui n'est plus disponible!

Action corrective: Changer de téléavertisseur

Il semble que Python l'utilisera si vous le spécifiez dans la variable d'environnement PAGER. Je n'ai trouvé aucune mention de téléavertisseurs dans la documentation. Est-ce évident ou s'agit-il d'une fonctionnalité autre que Python?

$ export PAGER=less
$ python
>>> import sys
>>> help(sys.argv)  #À partir de là, vers le bas s'affiche sur l'écran le moins, de sorte que l'interpréteur Python est masqué une fois
Help on list object:

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

Félicitations, l'aide est de retour. Cette fois, j'ai remarqué dans l'affichage d'aide de Python, mais d'autres personnes utilisant more.com sont susceptibles de rencontrer le même problème. Même dans ce cas, il peut y avoir quelque chose qui peut être résolu avec ʻexport PAGER = less`.

De côté

getpreferredencoding pas assez bon

Essayez d'exécuter à nouveau locale.getpreferredencoding () avec la résolution résolue.

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

Après toute acquisition par getpreferredencoding n'est pas assez bon.

cmd /? devient anglais

Si «chcp 65001» est défini, le résultat de «cmd /?» Sera en anglais. Si vous faites start cmd /?, Le japonais sera affiché.

référence: [Invite de commande / Mode anglais / Méthode de commutation du mode japonais / chcp - Vivre sous 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)

Compagnon PAGER

Il semble que la variable d'environnement GIT_PAGER puisse également être utilisée dans git.

Histoire

2016/09/27 Décrit à propos de chcp 09/10/2016 Ajouté à propos de PAGER

Recommended Posts

Caractères Python déformés dans l'environnement Windows + Git Bash
environnement windows python
Utilisation de venv dans un environnement Windows + Docker [Python]
Construction de l'environnement VScode (Windows10, Python, C ++, C, Git)
Environnement de développement en Python
Construction de l'environnement Python (Windows10 + Emacs)
Gérer les variables d'environnement en Python
Créer un environnement Python sur Windows
Construire un environnement Python avec Windows
Encapsulation des opérations git en Python
Construire un environnement Python sous un environnement Windows 7
Installation de Python en 2 lignes @Windows
Utilisez httpie à partir de Windows git bash
[Python] Afficher plusieurs fenêtres avec Tkinter
Mémo de construction de l'environnement Python sur Windows 10
Appuyez sur une commande en Python (Windows)
Construction de l'environnement Anaconda Python sous Windows 10
Mettez MeCab dans "Windows 10; Python3.5 (64 bits)"
installation de python2.7 dans un environnement Windows 32 bits
Installer Scrapy dans l'environnement Python Anaconda
Divers paramètres Anaconda dans l'environnement Windows 10
[Python3] Construction de l'environnement de développement << Édition Windows >>
Windows10: Installation de la bibliothèque MeCab pour python
installer tensorflow dans un environnement anaconda + python3.5
Installer l'environnement de développement Python sur Windows 10
Analyser le journal de validation Git en Python
UnicodeDecodeError se produit dans pip (environnement Windows)
Concurrence avec VS Code Créez un environnement Python pour les professionnels sous Windows
Fonctionnement de la souris à l'aide de l'API Windows en Python
Environnement de création de module d'extension Python 2.7, 3.4, 3.5 sous Windows
Procédure de construction de l'environnement de projet Python (pour Windows)
[Python] [Windows] Communication série en Python à l'aide de DLL
[Python] [Windows] Faites une capture d'écran avec Python
Configurer Pipenv sur Pycharm dans un environnement Windows
Création de scicit-learn dans un environnement Windows 10 à l'aide de Pycharm
Pour référencer des variables d'environnement en Python dans Blender
Lancez l'interpréteur Python depuis Git bash
Windows Qt5.4 Python3.4 QProcess caractères japonais brouillés
Création d'un environnement de développement Python pour Windows + gVim + Poetry
Introduction de sip-4.14 dans l'environnement python3.2.2 avec MacOS 10.7.4
Préparer un environnement de développement Python pour chaque projet dans un environnement Windows (VSCode + virtualEnvWrapper + Pylint)
[Python] Raison de dtype "int32" dans Numpy (environnement Windows) (à partir de septembre 2020)
Quadtree en Python --2
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Créez un environnement de test Vim + Python en 1 minute
Python 3.3 avec Anaconda
Géocodage en python
SendKeys en Python
Lire un fichier contenant des lignes brouillées en Python
Méta-analyse en Python
Analysons le journal de validation git en Python!
Créer un environnement qui utilise Python avec Eclipse
Je souhaite utiliser Python dans l'environnement de pyenv + pipenv sous Windows 10
paramètres d'environnement python