尝试通过 openpyxl 解析.xlsx时"UnicodeEncodeError: 'charmap' codec can't encode characters"



---更新---

我认为这个控制台日志解决了这个问题,但仍然不清楚如何解决它:

>>> workbook = openpyxl.load_workbook('data.xlsx')
>>> worksheet = workbook.active
>>> worksheet['A2'].value
u'u041cu0435u0448u043eu043a u0434u0435u043du0435u0433'
>>> print worksheet['A2'].value
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:Python27libencodingscp437.py", line 12, in encode
    return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-4: character maps to <undefined>

---结束更新---

我正在尝试使用openpyxl:打印一些.xlsx单元格的值

import openpyxl
workbook = openpyxl.load_workbook(filename='puzzles.xlsx')
worksheet = workbook.active
for row in worksheet.iter_rows('A2:K5'):
    print row[0].value

这导致以下错误:

Traceback (most recent call last):
  File "xls_import.py", line 8, in <module>
    print row[0].value
  File "C:Python27libencodingscp437.py", line 12, in encode
    return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-4: character maps to <undefined>

据我所知,XLSX编码为UTF-8,但是:

print row[0].value.decode('utf-8')

也无济于事:

Traceback (most recent call last):
  File "xls_import.py", line 8, in <module>
    print row[0].value.decode('utf-8')
  File "C:Python27libencodingsutf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)

有什么建议吗?

我正在运行Python 2.7和openpyxl 2.2.5。

openpyxl返回unicode字符串(XML本身以UTF-8编码),因此您不需要解码它们(解码从编码到unicode),而是以您选择的编码方式对它们进行编码

相关内容