Unicode编码错误:'ascii'编码无法在位置4273-4279编码字符:数值超出范围(128)
我想把一个html页面转换成pdf。为此,我从excel中获取数据,并把它存储在一个python字典里。接下来,我像下面这样格式化字符串。
把python变量的数据写入文件:
html_file.write( html_rcc_string%(row["B_6.2OwnerName"],
row["B_6.3OwnerNameH"],))
在上面的代码中,html_rcc_string
包含了html代码,也就是:
<table>
<tr>
<td>Owner name</td>
<td>Owner name in hindi</td>
</tr>
<tr>
<td>%s</td>
<td>%s</td>
</tr>
</table>
当我提供一个包含印地语名字的字典变量时,它返回了下面的错误。
UnicodeEncodeError: 'ascii' codec can't encode characters in position 4273-4279: ordinal not in range(128)
我在网上搜索过这个问题,但没有找到任何解决办法。我该如何用印地语显示用户名呢?有什么建议吗?
1 个回答
4
考虑一下来自优秀的 实用的Unicode - 或者说我该如何停止痛苦? 的建议:做一个“Unicode三明治——外面是字节,里面是Unicode”。也就是说,当你读取输入时,立刻把它转换成Unicode;而当你写输出时,立刻把它转换成utf8。
把这个逻辑应用到你的程序中,我有以下内容:
# coding: utf8
row = {
"B_6.2OwnerName": u'ABHAY',
"B_6.3OwnerNameH": u'अभय' }
html_rcc_string = u'''
<table>
<tr>
<td>Owner name</td>
<td>Owner name in hindi</td>
</tr>
<tr>
<td>%s</td>
<td>%s</td>
</tr>
</table>
'''
with open('/tmp/html_file.html', 'w') as html_file:
html_file.write( (html_rcc_string%(row["B_6.2OwnerName"],
row["B_6.3OwnerNameH"],)).encode('utf8') )
还有其他方法可以调用utf8编码器,但重点是:确保你程序中的所有数据都是 unicode
,而不是 str
。在最后的时刻,只有在那时,你才把它转换成utf8编码的 str
。