我正在通过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编码中的俄语翻译。
答案 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中,str
被bytes
取代,unicode
被重命名为str
,以使其更加明显。)
.decode()
上的 str
允许您使用您指定的编码从某些字节(您从某处读取)中获取“有意义”的unicode字符串,而.decode()
unicode
对象反之亦然:允许您使用您选择的编码获取字符串的字节表示。