Sortie japonaise avec Python

introduction

Je pensais que je commencerais python, eh bien, après tout

print("Hello world")

Ouais bien.

print ("japonais")

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:

Solution ordinaire

Après de nombreuses recherches, j'ai trouvé que je devais convertir entre unicode et byte.

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

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

Non, ce n'est pas le cas.

setenv LANG ja_JP.UTF-8
Japonais

Eh bien, cela a fonctionné. Mais il y a plus de problèmes!

Je veux partir de cron

Lorsque vous démarrez cron, le processus parent est cron, il hérite donc naturellement de l'environnement cron. C'est l'histoire du type de paramètres régionaux définis pour l'ensemble du système. Cependant, étant donné que la politique de l'ensemble du système est unifiée avec le C de base (lorsque ls ou la date est définie sur le format de locale japonais, diverses choses ne fonctionnent pas), l'environnement cron est naturellement LANG = C. Cela ne peut pas être changé.

À part: shebang

Pour démarrer le script, écrivez #! / Usr / local / bin / python3 sur la première ligne. Il y a plusieurs façons d'appeler cela, mais cela semble être du shebang. Ainsi, ce que l'on appelle par là ne peut pas utiliser le shebang deux fois. En d'autres termes, lorsque #! / Usr / local / bin / foo, la première ligne de / usr / local / bin / foo ne doit pas être #! / Usr / local / bin / bar. .. Je ne savais pas ça. Vous appelez peut-être une série de fonctions exec () dans un appel système.

Je veux définir des variables d'environnement et démarrer

L'idée de transformer / usr / local / bin / python3 en un script shell était frustrante, je l'ai donc écrite en C.

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);
}

Maintenant, cela ne fonctionne qu'avec le premier print (" japonais "). (Je n'ai plus besoin d'encoder)

python3 n'est plus un lien symbolique, mais c'est une contre-mesure forcée, alors soyez patient.

En quelque sorte résolu. La route vers Pythonista est raide

Recommended Posts

Sortie japonaise avec Python
J'ai écrit python en japonais
Je comprends Python en japonais!
Lire la sortie Fortran avec python
Obtenez des synonymes japonais avec Python
Sortie japonaise lors de l'utilisation de python dans Visual Studio
Sortie de la liste du vendredi Premium 2017 en Python
Rendre la sortie standard non bloquante en Python
Exporter et exporter des fichiers en Python
Comment gérer le japonais avec Python
Quadtree en Python --2
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
Géocodage en python
SendKeys en Python
Méta-analyse en Python
Unittest en Python
sortie d'apprentissage python
Époque en Python
Discord en Python
Allemand en Python
DCI en Python
tri rapide en python
nCr en python
Plink en Python
Constante en Python
FizzBuzz en Python
Sqlite en Python
Étape AIC en Python
LINE-Bot [0] en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
Constante en Python
nCr en Python.
format en python
Scons en Python 3
Puyopuyo en python
python dans virtualenv
PPAP en Python
Quad-tree en Python
Réflexion en Python
Chimie avec Python
Hashable en Python
DirectLiNGAM en Python
LiNGAM en Python
Aplatir en Python
Aplatir en python
Entrée / sortie de données en Python (CSV, JSON)
Arborescence de sortie des fichiers en Python
Liste triée en Python
Texte de cluster en Python
AtCoder # 2 tous les jours avec Python
Daily AtCoder # 6 en Python
Daily AtCoder # 18 en Python
Modifier les polices en Python