Ex中的UnicodeDecodeError解码和保存

2024-09-30 10:31:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将我从excel表格中抓取的一些数据保存起来,但有一个特定的片段出现了unicode解码问题,其格式如下:

work_info['title'] = Darimān-i afsaradgī : rāhnamā-yi kāmil bira-yi hamah-ʼi khānvādahʹhā

导致错误的代码是:

^{pr2}$

错误是:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 5: ordinal not in range(128)

我尝试过几种不同的编码/解码技术,但到目前为止都没有任何效果。任何建议都将不胜感激。在

谢谢!在


Tags: 数据ininfotitle格式错误unicode解码
1条回答
网友
1楼 · 发布于 2024-09-30 10:31:58

看起来您使用的是python2,python2的unicode/bytes处理导致了这个问题。在

>>> s = 'Darimān-i afsaradgī : rāhnamā-yi kāmil bira-yi hamah-ʼi khānvādahʹhā'
>>> wb = Workbook()
>>> ws = wb.add_sheet('test')
>>> ws.write(1, 0, s)
>>> wb.save('test.xls')
Traceback (most recent call last):
...
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 5: ordinal not in range(128)

xlwt假设s是ascii编码的字符串,并尝试将其解码为unicode,但失败:

^{pr2}$

实际上,s被编码为utf-8:

>>> s.decode('utf-8') 
u'Darim\u0101n-i afsaradg\u012b : r\u0101hnam\u0101-yi k\u0101mil bira-yi hamah-\u02bci kh\u0101nv\u0101dah\u02b9h\u0101'

最简单的解决方案可能是将您的工作簿编码为utf-8:

>>> wb = Workbook(encoding='utf-8')
>>> ws = wb.add_sheet('test')
>>> ws.write(1, 0, s)
>>> wb.save('test.xls')

如果需要更细粒度的方法,可以在将字符串写入工作表之前将其显式解码为unicode:

>>> wb = Workbook()
>>> ws = wb.add_sheet('test')
>>> ws.write(1, 0, s.decode('utf-8'))
>>> wb.save('test.xls')

相关问题 更多 >

    热门问题