Résoudre l'erreur d'écriture japonaise UnicodeEncodeError dans le fichier Python

Je pense que la gestion des codes de caractères peut toujours être mentionnée comme la porte démoniaque de Python. Quand j'ai commencé à utiliser Python, j'étais fatigué de manipuler ce code de caractère et je le réutiliserais! Il fut un temps où je pensais. J'y suis habitué maintenant. .. ..

Qu'est ce que tu essayais de faire

  1. Obtenez le journal des requêtes avec l'API DB avec un script Python.
  2. Écrivez dans le fichier.

C'est juste ça.

S'il y avait un commentaire japonais dans le journal des requêtes, l'erreur UnicodeEncodeError au début peut se produire lors de l'écriture.

J'écrirai la situation et la solution. Python est 2.7. Je suis désolé cette fois. .. .. ..

C'était pas mal quand j'ai vérifié ...

Lorsque je l'ai obtenu avec l'API DB, j'ai pu obtenir le journal des requêtes sans aucun problème et supprimé les chaînes de caractères inutiles. J'ai également pu rédiger un journal d'essai! Alors j'ai pensé: "Oh, alors je l'écris juste dans un fichier!"

Écrivons cela dans un fichier.

# -*- coding: utf-8 -*-

#En fait, le journal est acquis par l'API, mais ici nous le consignerons sous forme de chaîne de caractères pour vérifier l'opération.
log = "aaa japonais"

with open("test.txt", "a") as f:
    f.write(log + "\r\n")

En regardant le fichier test.txt

aaa japonais

Il est écrit correctement. Il ne vous reste plus qu'à récupérer le journal des requêtes de l'API et à l'exécuter. Je me demandais. Ainsi, lorsque j'obtiens le journal de l'API et que je l'écris, l'erreur suivante se produit. .. (Je suis désolé, mais je vais omettre la partie API)


Traceback (most recent call last):
  File "writetest.py", line 11, in <module>
    f.write(log + "\r\n")
UnicodeEncodeError: 'ascii' codec can't encode characters in position 4-6: ordinal not in range(128)

__ En conclusion, la chaîne de caractères obtenue par l'API a été traitée comme du type Unicode. Apparemment, en python2, lors de l'écriture avec write, cela semble être une erreur provoquée en essayant d'écrire avec l'ascii par défaut. __ Cela n'a pas été étudié en détail, mais cela semble être le cas.

Comment l'avez-vous résolu?

log = log.encode("utf_8")

Je l'ai converti une fois en utf-8 et l'ai écrit.


# -*- coding: utf-8 -*-

#Obtenez des journaux avec l'API
log = (Obtenez des journaux avec l'API)

log = log.encode("utf_8")

with open("test.txt", "a") as f:
    f.write(log + "\r\n")

Au fait,

f.write(log.encode("utf_8") + "\r\n")

Mais c'était une erreur similaire.

Autres solutions

Y compris la solution ci-dessus

Il semble y avoir une méthode telle que.

Comportement de type Unicode

Au fait, vérifions le fonctionnement simple du type Unicode.

# coding: utf-8

str_1 = "Japonais"
str_2 = u"Japonais"

print str_1
print str_2

print type(str_1)
print type(str_2)

print len(str_1)
print len(str_2)

print ("Livre" in str_1)
print (u"Livre" in str_2)

print str_1.find("Livre")
print str_2.find(u"Livre")

Quand tu fais ça

Japonais# print str_1
Japonais# print str_2
<type 'str'>       # print type(str_1)
<type 'unicode'>   # print type(str_2)
9                  # print len(str_1)
3                  # print len(str_2)
True               # print ("Livre" in str_1)
True               # print (u"Livre" in str_2)
3                  # print str_1.find("Livre")
1                  # print str_2.find(u"Livre")

Un coup d'œil, En type str, la chaîne de caractères est gérée au format octet Le type unicode est traité comme un caractère (qui peut être jugé intuitivement par une personne) Tu peux voir ça.

À partir de là, je pense que l'unicode est plus facile à gérer lorsqu'il s'agit de chaînes de caractères.

Pour cette raison, vous pouvez comprendre que le journal lorsque le journal a été acquis par l'API par python au début a été acquis par le type unicode.

Au fait, je ne connaissais pas du tout ce mouvement.

Recommended Posts

Résoudre l'erreur d'écriture japonaise UnicodeEncodeError dans le fichier Python
Lire et écrire des fichiers JSON avec Python
Ecrire Python dans MySQL
Gérer les fichiers zip avec des noms de fichiers japonais dans Python 3
Liste des erreurs Python (japonais)
Sortie japonaise avec Python
Pour écrire dans Error Repoting en Python sur GAE
J'ai écrit python en japonais
Ecrire des filtres Pandec en Python
Écrire une distribution bêta en Python
Ecrire python dans Rstudio (réticulé)
#python python évitement des erreurs de syntaxe japonaise
Je comprends Python en japonais!
Obtenez des synonymes japonais avec Python
Translocation de fichiers CSV avec Python Partie 1
Ecrire une dichotomie en Python
Ecrire un schéma JSON avec Python DSL
Python est UnicodeEncodeError dans le menu fixe CodeBox
Ecrire un serveur HTTP / 2 en Python
Ecrire une fonction AWS Lambda en Python
Manipuler des fichiers et des dossiers en Python
Ecrire des algorithmes A * (A-star) en Python
Gestion des fichiers JSON en Python
Téléchargez des fichiers Google Drive en Python
Trier les gros fichiers texte en Python
Ecrire le code de test du sélénium en python
Ecrire un graphique à secteurs en Python
Ecrire le plugin vim en Python
Écrire une recherche de priorité en profondeur en Python
Lire des fichiers en parallèle avec Python
Exporter et exporter des fichiers en Python
Ecrire un test unitaire de langage C en Python
Comment gérer le japonais avec Python
Extraire des chaînes de fichiers avec Python
Écrire de la documentation dans Sphinx avec Python Livereload
Comment résoudre l'erreur "Aucun noyau de grammaire Python trouvé" dans Atom
Trouver des fichiers comme Linux Find en Python
Arborescence de sortie des fichiers en Python
Ecrire le test dans la docstring python
Tapez les annotations pour Python2 dans les fichiers stub!
Erreur [Python d'instruction matérielle illégale] dans PyMC3
Decorator pour éviter UnicodeEncodeError dans Python 3 print ()
Ecrire une courte définition de propriété en Python
Résoudre l'erreur d'adresse déjà utilisée
Ecrire le fichier O_SYNC en C et Python
Référence du fichier INI en Python ou Ruby
Ecrire un programme de chiffrement Caesar en Python
Automatisez les tâches en manipulant des fichiers en Python
Erreur de clé de dictionnaire → Résoudre avec la clé dans le dictionnaire
Ecrire une méthode de cupidité simple en Python
Exemple de gestion des fichiers eml en Python
Ecrire un module python dans fortran en utilisant f2py
Ecrire un plugin Vim simple en Python 3
Téléchargez des fichiers dans n'importe quel format en utilisant Python
Comment écrire Ruby to_s en Python
Erreur d'importation: aucun module nommé "xxxxxx" dans Python3
Convertir le fichier FBX en ASCII <-> BINARY en Python
Résumé de la façon d'importer des fichiers dans Python 3
Écrivons FizzBuzz avec une erreur: Version Python
ModuleNotFoundError: Erreur de module nommé'_bz2 'en Python dans pyenv