0

我正在使用xlrdcx_freeze

现在,当我尝试从 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() 

这是代码

4

1 回答 1

1

您没有显示错误来自哪一行代码。完整的回溯比仅显示错误消息提供的信息要多得多。

当你有一个 Unicode 字符串并且你将它传递给支持未知编码方法的东西时,通常会出现 UnicodeEncodeError(注意:不是你给这个线程命名的“UnicodeEncodingError”)。这里最有可能的情况是在您的印刷品中。追溯会告诉我们这是否是问题的根源。

问题是 Python 不知道如何将非 ASCII Unicode 字符打印到终端。在这种情况下,这是因为您有字符 '\u2019',它是正确的单引号。(而不是“,”标记,它是一个逗号。)

您必须告诉它如何将 Unicode 编码为适合您终端的一组字节;具体来说,是一个 Windows 终端。这将您的问题减少到在防止 Python 中的编码错误和您在此处搜索错误消息时获得的几十个其他帖子中讨论的问题。

由于您使用的是 Windows,因此请从“Prevent encoding errors in Python”链接中获取建议并执行以下操作:

print(s.encode('cp850', errors='replace'))
于 2012-12-04T20:01:00.030 回答