将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。 这会给你一个unicode
types的对象。
请注意,如果您尝试打印它,它将首先隐式编码,即转换回默认编码ansi
str
。 如果您的控制台支持unicode,则可以通过以下方式打印它:
print xyz.encode('utf-8')
请注意,Python的str
string由8位字节(字符)组成,而unicode
表示实际的string,其中一个字符可以是任何Unicode字符。 (在Python 3中, str
被replace为bytes
, unicode
重命名为str
以使其更加明显)。
在一个str
上的.decode()
允许你使用你指定的编码从某个字节中取出一个“有意义”的unicodestring,而unicode
对象上的.decode()
却是相反的:允许你使用您select的编码获取string的字节表示forms。