2013-10-08 59 views
2

我有一堆英文句子,我從文本文件提取到MYSQL表。這是我創造了我的MySQL表:未解決的「UnicodeEncodeError:'拉丁-1'編解碼器無法編碼位置86-87字符:序號不在範圍(256)」

create table sentences (ID int NOT NULL AUTO_INCREMENT , sentence varchar (255) , primary key (ID)) character set = utf8; 

,這是我的Python腳本

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) 

而且我運行一個文件中的腳本以這種方式

python wikitext.py test 

因此,即使雖然我指定該表應該能夠處理UTF-8中的所有字符,但我仍然收到此錯誤:

UnicodeEncodeError: 'latin-1' codec can't encode characters in position 86-87: ordinal not in range(256) 
+0

函數get_sentences返回的數據類型是什麼?它是一個unicode元素的列表? – hago

+0

是的,它返回一個句子列表。 – kolonel

回答

5

我猜你使用Python 2.x中,而

curs.execute('insert ignore into sentences (sentence) values (%s);', (x)) 

執行,如果x是一個Unicode的對象,Python使用控制檯的默認字符集將其編碼爲一個字符串。假設你的默認字符集是latin-1,並且這個unicode對象x包含非ascii字符,python會發現它不能被編碼並拋出錯誤。您必須手動將x轉換爲指定字符集的字符串,請嘗試以下操作:

curs.execute('insert ignore into sentences (sentence) values (%s);', (x.encode('utf-8')) 
相關問題