Ungelöst "UnicodeEncodeError: 'latin-1' codec can T encode characters in position 86-87: ordinal not in range(256)"
Ich habe ein paar englische Sätze, die ich extrahieren aus einer text-Datei in eine MYSQL-Tabelle. Dies ist, wie ich meine Tabelle in MYSQL:
create table sentences ( ID int NOT NULL AUTO_INCREMENT , sentence varchar (255) , primary key (ID) ) character set = utf8;
und das ist mein python-Skript
from bs4 import BeautifulSoup as b
import sys
from fixsentence import *
import MySQLdb as db
bound = sys.argv[1]
con = db.connect('localhost' , 'root' , 'ayrefik1' , 'knowledgebase2')
curs = con.cursor()
def gettext(file):
temp_file = open(file)
soup = b(temp_file)
list = get_sentences(soup.get_text())
for x in list:
curs.execute('SET NAMES utf8;')
curs.execute('insert ignore into sentences (sentence) values (%s);', (x))
con.commit()
gettext(bound)
Und ich führe das Skript auf eine Datei auf diese Weise
python wikitext.py test
So, obwohl ich angegeben, dass die Tabelle sollte in der Lage sein, um alle Zeichen in UTF-8,
Ich habe immer noch diesen Fehler erhalten:
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 86-87: ordinal not in range(256)
- welche Art von Daten die Funktion get_sentences zurück? ist es eine Liste von unicode-Elementen?
- ja, es gibt eine Liste von Sätzen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, Sie verwenden python-2.x, während der Ausführung von
wenn x ist ein unicode-Objekt, python verwendet Ihre Konsole Standard-Zeichensatz zu codieren, es in eine Zeichenfolge . Vorausgesetzt, Ihr Standard-Zeichenkodierung ist latin-1 und unicode-Objekt x enthält nicht-ascii-Zeichen, python finden kann es nicht codiert werden, und werfen Sie den Fehler. Sie konvertiert x in einen string manuell mit einem Zeichensatz angegeben, versuchen Sie dies: