Hinweis zur Codierung bei LANG = C in Python

Wenn sich die LANG der Umgebung, in der ein bestimmtes Python-Skript ausgeführt wird, von ja_JP.UTF-8 in C ändert, wird ein Fehler angezeigt. Notieren Sie sich daher die Gegenmaßnahmen.

#!/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)

Es ist normalerweise in Ordnung, dies mit LANG = ja_JP.UTF-8 auszuführen. Dies liegt daran, dass Python normalerweise so eingestellt ist, dass es beim Start auf LANG schaut und die Standardcodierung für Eingabe und Ausgabe ändert. Wenn Sie dies also auf LANG = C bringen, wird versucht, UTF-8 als ASCII zu interpretieren, und es wird eine Ausnahme ausgegeben.

Geben Sie zunächst die Codierung zum Lesen der Datei an.

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

Geben Sie an, dass das im Druck verwendete Ausgabeziel von sys.stdout UTF-8 ist.

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

Der Logger funktioniert so wie er ist, aber die Ausgabe wird maskiert. Verwenden Sie daher die geänderte Datei sys.stderr.

handler = StreamHandler(sys.stderr)

Zusammenfassend sieht es so aus.

#!/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)

Referenz

Recommended Posts

Hinweis zur Codierung bei LANG = C in Python
Führen Sie Python in C ++ unter Visual Studio 2017 aus
Weiter Python in C-Sprache
Zeichenkodierung beim Umgang mit Dateien in Python 3
Kodierung des Urteils in Python
C-API in Python 3
Beachten Sie, wenn Sie lxml des Python-Pakets in Ubuntu 14.04 einfügen
Beachten Sie beim Initialisieren einer Liste in Python
Erweitern Sie Python in C ++ (Boost.NumPy)
Base64-Codierung von Bildern in Python 3
Python-Eingabehinweis in AtCoder
Binäre Suche in Python / C ++
Achtung bei os.mkdir in Python
Ein Hinweis beim Berühren der Gesichtserkennungs-API von Microsoft mit Python
Vorsichtsmaßnahmen bei der Verwendung von Pit mit Python
[Hinweis] Project Euler in Python (Problem 1-22)
Verhalten beim Auflisten in Python heapq
Unterstützung bei der Installation von Pillon auf Python3.9
Beim Lesen der C ++ - Struktur mit Cython
Löse ABC036 A ~ C mit Python
So verpacken Sie C in Python
Fremdschlüssel in SQLite von Python [Hinweis]
Löse ABC037 A ~ C mit Python
Schreiben Sie einen C-Sprach-Unit-Test in Python
Bei Verwendung regulärer Ausdrücke in Python
Beim Schreiben eines Programms in Python
Rufen Sie C / C ++ von Python auf dem Mac auf
Ein Fehler beim Einfügen von Pygame in Python3 auf Himbeer-Pi wurde behoben
Vorsichtsmaßnahmen beim Ausführen von Python unter EC2 über AWS Lambda (Befehl ausführen)
Hinweise zur Verwendung der Tab-Vervollständigung beim interaktiven Ausführen von Python unter Windows
Wenn Sie mehrere Schlüssel in Python-Sortierung angeben
Python Hinweis: Wenn easy_install nicht verwendet werden kann
Vorsichtsmaßnahmen beim Beizen einer Funktion in Python
Suchen Sie nach Dateien wie Linux Find in Python
Anmerkung von nfc.ContactlessFrontend () von nfcpy von Python
Algorithmus in Python (ABC 146 C Dichotomie
Hinweise beim Erstellen einer Umgebung mit Python
Implementieren Sie den FIR-Filter in Python und C.
So setzen Sie die Standardcodierung in Python auf utf-8
[Python] Berechnen Sie die Anzahl der Stellen, die zum Ausfüllen von Nullen erforderlich sind. [Hinweis]
[C] [Python] Lesen mit AquesTalk unter Linux
Führen Sie AzureKinect an Heiligabend in Python aus.
Schreiben Sie die O_SYNC-Datei in C und Python
Hinweis: Python
Wenn Sie sich die Speichernutzung in Python 3 ansehen
Python-Codierung
Python-Notiz
Generieren Sie mit Python eine C-Sprache aus dem S-Ausdruck
Ein nützlicher Hinweis, wenn Sie Python nach langer Zeit verwenden
Bei der Konvertierung von CSV in JSON mit Python bin ich auf einen Zeichencode gestoßen
[Tipps] Leicht lesbares Schreiben beim Verbinden von Funktionen in Python
Wenn der Codec das Byte nicht dekodieren kann, wird es in Python angezeigt
Verwendung der C-Bibliothek in Python
Verwenden Sie Python für formatierte Ausgaben wie C / C ++ printf
3 Möglichkeiten, Zeitzeichenfolgen mit Python zu analysieren [Hinweis]
[Hinweis] Erstellen Sie eine Python-Umgebung auf dem Mietserver "CORESERVER".
So generieren Sie eine Sequenz in Python und C ++
Installieren Sie das Python-Paket in einer persönlichen Umgebung unter Ubuntu
Wenn ich matplotlib in Python versuche, heißt es'cairo.Context '.