0

在 Excel2007 电子表格(我使用 xlrd xlwt 和 openpyxl)中处理德语单词(有时包含变音符号),我得到以下值:

var = str(ws.cell(row=i+k,column=0).value).encode('latin-1')

我得到了 print(var):

'[a word')

直到出现一个包含变音符号的单词,当我得到:

Traceback (most recent call last):
  File "C:\Users\cristina\Documents\horia\Linguistics3\px t3.py", line 68, in <module>
    var = str(ws4.cell(row=i+k,column=0).value).encode('latin-1')
UnicodeEncodeError: 'ascii' codec can't encode character u'\xdf' in position 3:ordinal not in range(128)

程序停止。

如果我将 var 定义为:

var = u'str(ws4.cell(row=i+k,column=0).value)'.encode('latin-1')

我得到,当母鸡试图打印(var)时,我得到:

var=str(ws.cell(row=i+k,column=0).value)

程序正常运行直到结束

我可以在 Python Shell 中获取 var 的值,但不能通过程序中的“print(var)”获取。

谁能给我一个解决方案?

4

1 回答 1

2

首先,请阅读:http ://www.joelonsoftware.com/articles/Unicode.html (认真)

然后,了解 Python2 有两种不同的数据类型:unicode,用于“不可知”处理所有可能的字符,但不能用于输入/输出,例如“打印”或写入文件,而无需编码 到另一个数据类型:字符串。

字符串依赖于编码。

鉴于您的错误消息,我几乎可以肯定的是,该ws4.cell(row=i+k,column=0).value调用正在向您返回一个 unicode 值。(我无法在我的非 Windows 环境中对其进行测试) - 为了确定不是猜测工作,您可能希望在那里运行一次, print (type(ws4.cell(row=i+k,column=0).value)只是为了断言您正在获取 unicode 值。

因此,当您这样做时,str(ws4.(...).value)您是在告诉 Python 仅将 unicode 转换为 str 而不进行任何编码 - 这是引发错误的调用,而不是随后的“解码”调用。

如果这是正在发生的事情,只需将str调用替换为unicode

var = u'str(ws4.cell(row=i+k,column=0).value)'.encode('latin-1') 

那应该可以解决您的问题。我希望你已经阅读了我上面链接的文章——它很有帮助

此外,使用您正在使用的相应编码标记您的 Python 源代码 - 否则您将在源代码中的任何非 ASCII 字符上收到错误。

例如,在代码的第一行写下:

# coding: latin1

(尽管对于任何严肃的项目,您都应该使用 utf-8。)

于 2013-01-06T11:39:16.077 回答