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
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. .. .. ..
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.
Y compris la solution ci-dessus
Il semble y avoir une méthode telle que.
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