Japanische Ausgabe mit Python

Einführung

Ich dachte, ich würde doch Python starten

print("Hello world")

Ja, gut.

Druck ("Japanisch")

Traceback (most recent call last):
  File "/tmp/a.py", line 1, in <module>
    print("\u65e5\u672c\u8a9e");
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)

:cry: :-1:

Gewöhnliche Lösung

Nach vielen Recherchen stellte ich fest, dass ich zwischen Unicode und Byte konvertieren musste.

print ("Japanisch" .encode ("utf-8"))

b'\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e'

Nein, das ist nicht der Fall.

setenv LANG ja_JP.UTF-8
japanisch

Nun, es hat funktioniert. Aber es gibt noch mehr Probleme!

Ich möchte von cron ausgehen

Wenn Sie cron starten, ist der übergeordnete Prozess cron, daher erbt er natürlich die cron-Umgebung. Das ist die Geschichte, welche Art von Gebietsschema für das gesamte System festgelegt ist. Da jedoch die Richtlinie des gesamten Systems mit dem Basis-C vereinheitlicht ist (wenn ls oder date auf das japanische Gebietsschema-Format eingestellt sind, funktionieren verschiedene Dinge nicht), ist die Cron-Umgebung natürlich LANG = C. Es kann nicht geändert werden.

Nebenbei: shebang

Um das Skript zu starten, schreiben Sie in die erste Zeile "#! / Usr / local / bin / python3". Es gibt viele Möglichkeiten, dies zu nennen, aber es scheint Shebang zu sein. Also, was dies genannt wird, kann Shebang nicht zweimal verwenden. Mit anderen Worten, wenn "#! / Usr / local / bin / foo", sollte die erste Zeile von / usr / local / bin / foo nicht "#! / Usr / local / bin / bar" sein. .. Das wusste ich nicht. Möglicherweise rufen Sie eine exec () - Reihe von Funktionen in einem Systemaufruf auf.

Ich möchte Umgebungsvariablen setzen und starten

Die Idee, / usr / local / bin / python3 in ein Shell-Skript umzuwandeln, war frustriert, sodass ich keine andere Wahl hatte, als es in C zu schreiben.

python3.c


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char **argv){
  putenv("LANG=ja_JP.UTF-8");
  argv[0] = "/usr/local/bin/python3.5";
  argv[argc] = NULL;
  execv("/usr/local/bin/python3.5",argv);
}

Jetzt funktioniert es nur noch mit dem ersten print (" Japanese "). (Ich brauche keine Kodierung mehr)

python3 ist keine symbolische Verbindung mehr, sondern eine gewaltsame Gegenmaßnahme. Bitte haben Sie etwas Geduld.

Irgendwie gelöst. Die Straße nach Pythonista ist steil

Recommended Posts

Japanische Ausgabe mit Python
Ich habe Python auf Japanisch geschrieben
Ich verstehe Python auf Japanisch!
Lesen Sie die Fortran-Ausgabe mit Python
Holen Sie sich japanische Synonyme mit Python
Japanische Ausgabe beim Umgang mit Python im Visual Studio
Ausgabe 2017 Premium Friday List in Python
Machen Sie die Standardausgabe in Python nicht blockierend
Exportieren und Ausgeben von Dateien in Python
Umgang mit Japanisch mit Python
Quadtree in Python --2
Python in der Optimierung
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
SendKeys in Python
Metaanalyse in Python
Unittest in Python
Python-Lernausgabe
Epoche in Python
Zwietracht in Python
Deutsch in Python
DCI in Python
Quicksort in Python
nCr in Python
Plink in Python
Konstante in Python
FizzBuzz in Python
SQLite in Python
Schritt AIC in Python
LINE-Bot [0] in Python
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Konstante in Python
nCr in Python.
Format in Python
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv
PPAP in Python
Quad-Tree in Python
Reflexion in Python
Chemie mit Python
Hashbar in Python
DirectLiNGAM in Python
LiNGAM in Python
In Python reduzieren
In Python flach drücken
Dateneingabe / -ausgabe in Python (CSV, JSON)
Ausgabebaumstruktur von Dateien in Python
Sortierte Liste in Python
Clustertext in Python
AtCoder # 2 jeden Tag mit Python
Täglicher AtCoder # 6 in Python
Täglicher AtCoder # 18 in Python
Bearbeiten Sie Schriftarten in Python