2012-12-04 34 views
0

我使用的是xlrdcx_freezeUnicodeEncodingError

現在,當我試圖從Excel文件讀取,它顯示了一個錯誤,當它來到了「」標記:

UnicodeEncodeError: 'charmap' codec can't encode character "\u2019" in position 12: character maps to <undefined> 

from xlrd3 import * 
book= open_workbook('s1.xls') 
sheet=book.sheet_by_index(0) 
import sys 
from encodings import * 
from codecs import * 
def pr(): 
    global row,col 
    if isinstance((sheet.cell(row,col).value), float): 
     cell = sheet.cell(row,col) 
     cell_value = cell.value 
     cell_value1= int(cell.value) 
     s=[] 
     s.append(cell_value1) 
     print (s) 
     s=[] 
    else: 
     cell = sheet.cell(row,col) 
     cell_value = cell.value 
     s=[] 
     s.append(cell_value) 
     print (s) 
     s=[] 

def co(): 
    x=input("'S'earch again or 'Q'uite?: ") 
    if x == 'S' or x=='s': 
     search() 
    elif x == 'Q'or x == 'q': 
     sys.exit(0) 
    else: 
     print ('Please enter a Vailed answer: ') 
     co() 

def search(): 
    global row,col 
    s=[] 
    a=(input("Enter Search : ")) 
    for row in range(sheet.nrows): 
     for col in range(sheet.ncols): 
      s.append(str(sheet.cell(row,col).value)) 
      if a in (str(sheet.cell(row,col).value)): 
       for col in range(sheet.ncols): 
        pr()  
      else: 
       s=[] 
    co() 

search() 

這是代碼

+1

我不確定我能幫上什麼忙,但我認爲任何能夠幫助的人都需要看到您寫入的文件中讀取的代碼。呈現錯誤是好的,但調用異常時運行的代碼甚至更加關鍵。 – PyNEwbie

+0

感謝pynewbie的評論,那就是代碼 –

+0

這本質上是一個http://stackoverflow.com/questions/11050292/prevent-encoding-errors-in-python的副本,只有很多無關的文本和有用的指針,像堆棧軌跡一樣,被刪除。我認爲它應該被標記爲重複。 –

回答

1

你不顯示你的錯誤來自哪一行代碼。完整的回溯信息比僅顯示錯誤信息的信息多得多。

Unicode編碼錯誤(注意:不是'UnicodeEncodingError'標題爲這個線程)經常出現,當你有一個Unicode字符串,你傳遞給支持未知編碼方法的東西。這裏最可能的情況是在你的印刷品中。追溯會告訴我們這是否是問題的根源。

問題是Python不知道如何將非ASCII Unicode字符打印到終端。在這種情況下,這是因爲你有字符'\ u2019',這是正確的單引號。 (而不是「,」標記,它是逗號。)

您必須告訴它如何將Unicode編碼爲適合您的終端的一組字節;特別是Windows終端。這減少了你的問題在Prevent encoding errors in Python等幾十個帖子討論的一個,你的your error message here.

搜索既然你是在Windows上時得到的,從「Python中防止編碼錯誤」鏈接採取諮詢和做:

print(s.encode('cp850', errors='replace')) 
+0

謝謝安德魯很多 它是 文件「C:\ python \ 32-bit \ 3.2 \ lib \ encodings \ cp720.py「,編碼爲 的第32行,然後錯誤信息抱歉的錯誤,而不是鍵入整個味精導致它出現在exe文件的第二個,然後它崩潰,所以我已經採取了打印屏幕,所以我可以閱讀它,所以如果錯誤行做了一個不同的請告訴我很多:) –

+0

問題是「右單引號」不會發生在cp720。默認情況下,當它不知道該怎麼做時會引發錯誤。你需要告訴Python,用「?」替換那個角色是可以的。或者「忽略」任何問題。 –