Um das Protokoll und Ihren Verdacht zu bestätigen, ist dies ein Codierungsproblem (Bytes vs String am wahrscheinlichsten). Selbst wenn Sie die Kodierung Ihrer Datei mit # -*- coding: utf-8 -*-
auf UTF-8 setzen, können Sie immer noch Probleme mit Text haben, der von einem Formular in ein anderes geändert wurde.
Zeichenfolgen sind nicht wirklich Zeichenfolgen, sondern Darstellungen von Bytes in einer bestimmten Reihenfolge. UTF-8 ermöglicht die Codierung von viel mehr Zeichen, als ASCII verarbeiten kann. Wenn Sie also versuchen, ein in einer UTF-8-codierten Zeichenfolge vorhandenes Zeichen in eine ASCII-codierte Zeichenfolge zu konvertieren, erhalten Sie eine Fehlermeldung, da keine solche Codierung vorhanden ist .
Ich kann keine viel bessere Antwort ohne weitere Informationen, wie Code und/oder Datenquelle geben.
https://docs.python.org/2/howto/unicode.html#the-unicode-type Lesen lernen wir durch das folgende Beispiel studiert (e):
>>> unicode('abcdef')
u'abcdef'
>>> s = unicode('abcdef')
>>> type(s)
<type 'unicode'>
>>> unicode('abcdef' + chr(255))
Traceback (most recent call last):
...
UnicodeDecodeError: 'ascii' codec can't decode byte 0xff in position 6:
ordinal not in range(128)
Die Dokumentation erwähnt auch, dass Sie diese Ausnahmen entweder zu ersetzen oder zu ignorieren, sie zu handhaben können wählen, etwa so:
>>> unicode('\x80abc', errors='strict')
Traceback (most recent call last):
...
UnicodeDecodeError: 'ascii' codec can't decode byte 0x80 in position 0:
ordinal not in range(128)
>>> unicode('\x80abc', errors='replace')
u'\ufffdabc'
>>> unicode('\x80abc', errors='ignore')
u'abc'
HINWEIS 1: In Python 3 haben sich die Dinge geändert. für das Schreiben von Code, die mit Python 3 kompatibel ist, empfehle ich folgende lesen:
https://docs.python.org/3.0/whatsnew/3.0.html#text-vs-data-instead-of-unicode-vs-8-bit
ANMERKUNG 2: Es ist auch erwähnenswert, dass, wenn Ihre Codierung Problem auftritt beim Versuch, die Zeichenfolge auf dem angezeigt werden Konsole dann, Python hat einen -u
Schalter, der in bestimmten Situationen verwendet werden kann, wie wenn Sie eine Binärdatei über ein CGI-Skript bedienen, das die Pufferung von Strings ausschalten wird, aber das öffnet eine andere Dose Würmer. Aber nichtsdestoweniger, dieses Verhalten nachahmen, ohne -u
Aufruf:
>>> print 'test'
'test'
>>> import os
>>> import sys
>>> sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
>>> print 'test'
test
umfassen Was die genaue Fehlermeldung ist ? – flo
@flo Leider habe ich keinen konstanten Zugriff auf den Pi, aber es war entlang dieser Linie '' ASCII'-Codec kann nicht das Zeichen **** in Position codieren **: Ordnungszahl nicht im Bereich (128) ' –