Unicode编码错误:'ascii'编码无法在位置4273-4279编码字符:数值超出范围(128)

0 投票
1 回答
1236 浏览
提问于 2025-04-18 05:24

我想把一个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

撰写回答