将Excel值从代码页1251转换为unicode

时间:2012-08-21 11:29:37

标签: python excel unicode

我正在通过python访问Excel以调整单元格的某些编码。到目前为止我的代码:

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编码中的俄语翻译。

1 个答案:

答案 0 :(得分:2)

我假设您使用的是Python 2. (Python 3中的Unicode处理方式不同。)

使用r.decode('cp1252')将编码中的r解码为unicode。这将为您提供unicode类型的对象。

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

print xyz.encode('utf-8')

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

.decode()上的

str允许您使用您指定的编码从某些字节(您从某处读取)中获取“有意义”的unicode字符串,而.decode() unicode对象反之亦然:允许您使用您选择的编码获取字符串的字节表示。