Ich denke, dass der Umgang mit Zeichencodes immer als das Dämonentor von Python bezeichnet werden kann. Als ich anfing, Python zu verwenden, hatte ich es satt, mit diesem Zeichencode umzugehen, und würde ich ihn wieder verwenden! Es gab eine Zeit, in der ich dachte. Ich bin jetzt daran gewöhnt. .. ..
Was hast du versucht zu tun?
Es ist nur das.
Wenn das Abfrageprotokoll einen japanischen Kommentar enthält, kann der UnicodeEncodeError am Anfang beim Schreiben auftreten.
Ich werde die Situation und Lösung schreiben. Python ist 2.7. Diesmal tut es mir leid. .. .. ..
Als ich es mit der DB-API bekam, konnte ich das Abfrageprotokoll problemlos abrufen und unnötige Zeichenfolgen löschen. Ich konnte auch ein Testprotokoll schreiben! Also dachte ich: "Oh, dann schreibe ich es einfach in eine Datei!"
Schreiben wir das in eine Datei.
# -*- coding: utf-8 -*-
#Eigentlich wird das Protokoll von der API erfasst, aber hier werden wir es als Zeichenfolge protokollieren, um den Vorgang zu überprüfen.
log = "aaa Japanisch"
with open("test.txt", "a") as f:
f.write(log + "\r\n")
Schauen Sie sich die Datei test.txt an
aaa Japanisch
Es ist richtig geschrieben. Jetzt müssen Sie nur noch das Abfrageprotokoll von der API abrufen und ausführen. Ich habe mich gewundert. Wenn ich das Protokoll von der API abrufe und schreibe, tritt der folgende Fehler auf. .. (Es tut mir leid, aber ich werde den API-Teil weglassen)
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)
__ Zusammenfassend wurde die von der API erhaltene Zeichenfolge als Unicode-Typ behandelt. Anscheinend scheint es in Python2 beim Schreiben mit Schreiben ein Fehler zu sein, der durch den Versuch verursacht wird, mit dem Standard-ASCII zu schreiben. __ __ Es wurde nicht im Detail untersucht, aber es scheint so.
Wie haben Sie es gelöst?
log = log.encode("utf_8")
Ich habe es einmal in utf-8 konvertiert und geschrieben.
# -*- coding: utf-8 -*-
#Protokolle mit API abrufen
log = (Protokolle mit API abrufen)
log = log.encode("utf_8")
with open("test.txt", "a") as f:
f.write(log + "\r\n")
Apropos,
f.write(log.encode("utf_8") + "\r\n")
Aber es war ein ähnlicher Fehler.
Einschließlich der obigen Lösung
Es scheint eine Methode wie zu geben.
Lassen Sie uns übrigens die einfache Operation vom Typ Unicode überprüfen.
# coding: utf-8
str_1 = "japanisch"
str_2 = u"japanisch"
print str_1
print str_2
print type(str_1)
print type(str_2)
print len(str_1)
print len(str_2)
print ("Buch" in str_1)
print (u"Buch" in str_2)
print str_1.find("Buch")
print str_2.find(u"Buch")
Wenn du das machst
japanisch# print str_1
japanisch# 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 ("Buch" in str_1)
True # print (u"Buch" in str_2)
3 # print str_1.find("Buch")
1 # print str_2.find(u"Buch")
Ein kurzer Blick, Im str-Typ wird die Zeichenfolge im Byte-Format behandelt Der Unicode-Typ wird als Zeichen behandelt (das von einer Person intuitiv beurteilt werden kann). Sie können sehen, dass.
Aus diesem Grund denke ich, dass Unicode beim Umgang mit Zeichenketten einfacher zu handhaben ist.
Aus diesem Grund können Sie verstehen, dass das Protokoll, als das Protokoll zu Beginn von der API von Python erfasst wurde, vom Unicode-Typ erfasst wurde.
Diese Bewegung kannte ich übrigens überhaupt nicht.
Recommended Posts