UnicodeDecodeError: 'ASCII Codec' kann Byte 0xef in Position 1 nicht dekodieren
Bin ich mit ein paar Fragen versuchen zu codieren eines Strings in UTF-8. Ich habe versucht, viele Dinge, einschließlich der Verwendung von string.encode('utf-8')
und unicode(string)
, aber ich bekomme die Fehlermeldung:
UnicodeDecodeError: 'ascii' codec can T decode byte 0xef in position 1: ordinal not in range(128)
Dies ist mein string:
(。・ω・。)ノ
Ich sehe nicht, was falsch läuft, keine Ahnung?
Edit: Das problem ist, dass der Druck der saite, wie es ist, nicht zeigen richtig. Auch dieser Fehler wenn ich versuche es zu konvertieren:
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> s = '(\xef\xbd\xa1\xef\xbd\xa5\xcf\x89\xef\xbd\xa5\xef\xbd\xa1)\xef\xbe\x89'
>>> s1 = s.decode('utf-8')
>>> print s1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-5: ordinal not in range(128)
Kommentar zu dem Problem
Es ist nur eine Regel eingefügt string. Das gleiche passiert, wenn ich nur drucken Sie es.
Ich treffe das gleiche bei pip installieren, und befestigen Sie es von hier: [install einige devel][1] [1]: stackoverflow.com/questions/17931726/...
InformationsquelleAutor der Frage Markum | 2012-05-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist zu tun mit der Kodierung des Terminals nicht auf UTF-8 eingestellt. Hier ist mein terminal
Auf mein terminal das Beispiel funktioniert mit den oben genannten, aber wenn ich loszuwerden, die
LANG
Einstellung, dann funktioniert es nichtKonsultieren Sie die Dokumentation für Ihre linux-Variante zu entdecken, wie man dies dauerhaft ändern.
InformationsquelleAutor der Antwort Nick Craig-Wood
versuchen:
edit:
'(\xef\xbd\xa1\xef\xbd\xa5\xcf\x89\xef\xbd\xa5\xef\xbd\xa1)\xef\xbe\x89'.decode('utf-8')
gibtu'(\uff61\uff65\u03c9\uff65\uff61)\uff89'
korrekt ist.also dein problem muss an etwas andere Stelle, möglicherweise, wenn Sie versuchen, etwas zu tun mit es es ist eine implizite Konvertierung Los ist (sein könnte, drucken, schreiben in einen stream...)
mehr zu sagen wir werden sehen müssen, code.
InformationsquelleAutor der Antwort mata
Mein +1 zu mata ' s Kommentar bei https://stackoverflow.com/a/10561979/1346705 und der Nick Craig-Wood-demonstration. Sie haben dekodiert die Zeichenfolge richtig. Das problem ist mit der
print
Befehl konvertiert die Unicode-Zeichenfolge an die Konsole Codierung und die Konsole ist nicht in der Lage, die Anzeige der Zeichenfolge. Versuchen Sie, schreiben Sie die Zeichenfolge in eine Datei und schau dir das Ergebnis mit ein paar anständige editor, der Unicode unterstützt:Dann werden Sie sehen
(。・ω・。)ノ
.InformationsquelleAutor der Antwort pepr
Wenn Sie arbeiten auf einem remote host, Blick auf
/etc/ssh/ssh_config
auf Ihre lokalen PC.Wenn diese Datei enthält eine Zeile:
Kommentar mit hinzufügen
#
an der head-of-line. Könnte es helfen.Mit dieser Zeile
ssh
sendet Sprache Umgebungsvariablen von Ihrem PC auf die remote host. Es bewirkt, dass viel Probleme.InformationsquelleAutor der Antwort Tsutomu
Keine Probleme mit meinem terminal. Die oben genannten Antworten halfen mir auf der Suche in die richtigen Richtungen, aber es funktionierte nicht für mich, bis ich Hinzugefügt
'ignore'
:Wie in dem Kommentar unten, dies kann zu unerwünschten Resultaten führen. OTOH, es kann auch einfach nur den trick tun gut genug, um die Dinge zu arbeiten, und Sie kümmern sich nicht um den Verlust einiger Charaktere.
InformationsquelleAutor der Antwort guaka
Versuchen Sie, das system default encoding
utf-8
am Anfang des Skripts, so dass alle Zeichenfolgen codiert.InformationsquelleAutor der Antwort Andrei Krasutski
Es sieht aus wie die Zeichenfolge codiert
utf-8
, also was genau ist das problem? Oder was versuchst du hier zu tun..?InformationsquelleAutor der Antwort wim
dies funktioniert für ubuntu 15.10:
InformationsquelleAutor der Antwort wlredeye
In meinem Fall, es wurde verursacht durch meine Unicode-Datei gespeichert, die mit einem "BOM". Um dieses Problem zu lösen, habe ich geknackt öffnen Sie die Datei mit BBEdit und hat eine "Speichern unter..." auswählen für die Codierung von "Unicode (UTF-8)" und nicht das, was er kam mit war der "Unicode (UTF-8 mit BOM)"
InformationsquelleAutor der Antwort user336828
War ich immer die gleiche Art von Fehler, und ich fand, dass die Konsole nicht in der Lage ist die Anzeige der Zeichenfolge in einer anderen Sprache. Daher machte ich die folgenden code-änderungen zu setzen, als default_charset UTF-8.
InformationsquelleAutor der Antwort Azam Khan
Es ist in Ordnung, verwenden Sie den folgenden code in die oben in Ihrem Skript als Andrei Krasutski vorgeschlagen.
Aber ich schlage vor, Sie auch hinzufügen
# -*- coding: utf-8 -*
Linie an ganz oben im script.Weglassen, wirft er folgende Fehlermeldung in meinem Fall, wenn ich versuche, führen
basic.py
.Der folgende code ist der code vorhanden in
basic.py
die wirft obige Fehlermeldung.code mit Fehler
Dann habe ich
# -*- coding: utf-8 -*-
Linie am oberen und ausgeführt. Es arbeitete.code ohne Fehler
Dank.
InformationsquelleAutor der Antwort Rishikesh Agrawani
Stückliste, es ist so oft Stücklisten für mich
vi die Datei, verwenden Sie
, und speichern Sie es. Dass fast immer behebt es in meinem Fall
InformationsquelleAutor der Antwort Olly W
Dies ist die beste Antwort:
https://stackoverflow.com/a/4027726/2159089
in linux:
so
sys.stdout.encoding
ist OK.InformationsquelleAutor der Antwort football
ich dieses problem beheben, ändern Sie in der Datei settings.py mit 'ENGINE': 'django.db.backends.mysql', nicht mit 'ENGINE': 'mysql.- Anschluss.django',
InformationsquelleAutor der Antwort user3787102
Einfach konvertieren Sie den text explizit auf string mit
str()
. Arbeitete für mich.InformationsquelleAutor der Antwort Supratim Samantray