Remarque sur l'encodage lorsque LANG = C en Python

Lorsque le LANG de l'environnement qui exécute un certain script Python passe de ja_JP.UTF-8 à C, une erreur apparaîtra, alors notez les contre-mesures à ce sujet.

#!/usr/bin/python3
# -*- coding: utf8 -*-

import sys

from logging import getLogger, StreamHandler, DEBUG

handler = StreamHandler()

logger = getLogger(__name__)
logger.setLevel(DEBUG)
logger.addHandler(handler)


str = "Hoge"
tf = open('utf8.txt')
s = tf.read()

print(str)
print(s)

logger.debug(str)
logger.debug(s)

Il est généralement bien de l'exécuter avec LANG = ja_JP.UTF-8. En effet, Python est généralement configuré pour regarder LANG au démarrage et changer le codage par défaut pour l'entrée et la sortie. Donc, si vous amenez ceci à LANG = C, il essaiera d'interpréter UTF-8 comme ASCII et donnera une exception.

Tout d'abord, spécifiez l'encodage pour la lecture du fichier.

tf = open('utf8.txt', encoding='utf8')

Spécifiez que la destination de sortie de sys.stdout utilisée dans l'impression est UTF-8.

sys.stdout = codecs.getwriter("utf8")(sys.stdout.detach())
sys.stderr = codecs.getwriter("utf8")(sys.stderr.detach())

L'enregistreur fonctionne tel quel, mais la sortie est échappée, utilisez donc le sys.stderr modifié.

handler = StreamHandler(sys.stderr)

En résumé, ça ressemble à ça.

#!/usr/bin/python3
# -*- coding: utf8 -*-

import codecs
import locale
import sys


from logging import getLogger, StreamHandler, DEBUG, Formatter

sys.stdout = codecs.getwriter("utf8")(sys.stdout.detach())
sys.stderr = codecs.getwriter("utf8")(sys.stderr.detach())

handler = StreamHandler(sys.stdout)

logger = getLogger(__name__)
logger.setLevel(DEBUG)
logger.addHandler(handler)



str = "Hoge"
tf = open('utf8.txt', encoding='utf8')
s = tf.read()

print(str)
print(s)

logger.debug(str)
logger.debug(s)

référence

Recommended Posts

Remarque sur l'encodage lorsque LANG = C en Python
Exécutez Python en C ++ sur Visual Studio 2017
Next Python en langage C
Encodage de caractères lors du traitement de fichiers en Python 3
Jugement de codage en Python
API C en Python 3
Remarque lors de la mise de lxml du package python dans ubuntu 14.04
Choses à noter lors de l'initialisation d'une liste en Python
Étendre python en C ++ (Boost.NumPy)
Encodage base64 des images en Python 3
Note d'entrée Python dans AtCoder
Recherche binaire en Python / C ++
Attention lorsque os.mkdir en Python
Une note quand j'ai touché l'API de reconnaissance faciale de Microsoft avec Python
Précautions lors de l'utilisation de Pit avec Python
[Note] Projet Euler en Python (problème 1-22)
Comportement lors de la liste dans Python heapq
Assistance lors de l'installation de l'oreiller sur python3.9
Lors de la lecture d'une structure C ++ avec Cython
Résoudre ABC036 A ~ C avec Python
Comment envelopper C en Python
Clé étrangère dans SQLite de Python [Note]
Résoudre ABC037 A ~ C avec Python
Ecrire un test unitaire de langage C en Python
Lors de l'utilisation d'expressions régulières en Python
Lors de l'écriture d'un programme en Python
Appeler C / C ++ depuis Python sur Mac
Résolution d'une erreur lors de la mise en place de pygame dans python3 sur raspberry pi
Précautions lors de l'exécution de Python sur EC2 à partir d'AWS Lambda (Exécuter la commande)
Remarques sur l'utilisation de la saisie semi-automatique lors de l'exécution interactive de Python sous Windows
Lors de la spécification de plusieurs clés dans le tri python
python Remarque: lorsque easy_install ne peut pas être utilisé
Précautions lors du décapage d'une fonction en python
Trouver des fichiers comme Linux Find en Python
Note de nfc.ContactlessFrontend () de nfcpy de python
Algorithme en Python (ABC 146 C Dichotomy
Remarques lors de la création d'un environnement avec python
Implémenter le filtre FIR en langage Python et C
Pour définir le codage par défaut sur utf-8 en python
[Python] Calculez le nombre de chiffres requis lors de la saisie de 0 [Note]
[C] [python] Lire avec AquesTalk sous Linux
Exécutez AzureKinect en Python la veille de Noël.
Ecrire le fichier O_SYNC en C et Python
Remarque: Python
Lors de l'examen de l'utilisation de la mémoire dans Python 3
Encodage Python
Note de Python
Générer un langage C à partir d'une expression S avec Python
Une note utile lors de l'utilisation de Python après une longue période
Je suis tombé sur un code de caractère lors de la conversion de CSV en JSON avec Python
[Astuces] Écriture facile à lire lors de la connexion de fonctions en Python
Lorsque le codec ne peut pas décoder l'octet apparaît en python
Comment utiliser la bibliothèque C en Python
Utilisez Python pour une sortie formatée telle que C / C ++ printf
3 façons d'analyser les chaînes de temps avec python [Note]
[Note] Construisez un environnement Python sur le serveur de location "CORESERVER"
Comment générer une séquence en Python et C ++
Installer le package python dans l'environnement personnel sur Ubuntu
Quand j'essaye matplotlib en Python, il dit 'cairo.Context'