0

我正在通过 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 编码的俄文翻译。

4

1 回答 1

2

我假设您使用的是 Python 2。(Unicode 处理在 Python 3 中有所不同。)

用于r.decode('cp1252')r您的编码解码为 un​​icode。这会给你一个类型的对象unicode

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

print xyz.encode('utf-8')

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

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

于 2012-08-21T11:36:07.433 回答