将Excel代码页1251中的Excel值转换为unicode

我正在通过python来调整一些编码的单元格。 我的代码到目前为止:

from xlrd import * from xlwt import * wb = open_workbook('a.xls') s = wb.sheets()[0] for row in range(s.nrows): e = s.cell(row,9).value r = s.cell(row,11).value print e,' ',r.decode('cp1251') 

当运行这个代码时,我得到这个错误:

 Traceback (most recent call last): File "C:\Users\pem\workspace\a\src\a.py", line 17, in <module> print e,' ',r.decode('cp1251') File "C:\Python27\lib\encodings\cp1251.py", line 15, in decode return codecs.charmap_decode(input,errors,decoding_table) File "C:\Python27\lib\encodings\cp1251.py", line 12, in encode return codecs.charmap_encode(input,errors,encoding_table) UnicodeEncodeError: 'charmap' codec can't encode character u'\xf6' in position 23: character maps to <undefined> 

我知道e是英文文本, r是1251编码中的俄文翻译。

我假设你正在使用Python 2. (在Python 3中,Unicode处理是不同的)

使用r.decode('cp1252')将您的编码中的r解码为unicode。 这会给你一个unicodetypes的对象。

请注意,如果您尝试打印它,它将首先隐式编码,即转换回默认编码ansi str 。 如果您的控制台支持unicode,则可以通过以下方式打印它:

 print xyz.encode('utf-8') 

请注意,Python的strstring由8位字节(字符)组成,而unicode表示实际的string,其中一个字符可以是任何Unicode字符。 (在Python 3中, str被replace为bytesunicode重命名为str以使其更加明显)。

在一个str上的.decode()允许你使用你指定的编码从某个字节中取出一个“有意义”的unicodestring,而unicode对象上的.decode()却是相反的:允许你使用您select的编码获取string的字节表示forms。