Python:UnicodeDecodeError:“ascii”编解码器无法解码位置0中的字节0xd0:序号不在范围内(128)

2024-10-02 20:42:32 发布

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

场景:我有一个JSON文件中的服务器名称列表,脚本将读取该列表并将其放入字典中。然后我尝试在SQL查询中使用这些服务器名称。但是,我对UTF-8编码的字符串有一个地狱般的时间。在

错误回溯:

Traceback (most recent call last):
  File "run.py", line 18, in <module>
    print(str(len(download.downloadRealmFiles('eu'))) + " EU files downloaded.")
  File "/var/www/etherealpost.com/scripts/ahdata/download.py", line 73, in downloadRealmFiles
    sql = u"UPDATE realms_lastmodified SET last_modified = '%d', latest_hash = '%s' WHERE region = '%s' AND realm = '%s'" % (lastModified, lastHash.encode('utf-8'), region.encode('utf-8'), realm)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 0: ordinal not in range(128)

代码:

^{pr2}$

lastModified是long类型 变量realm包含Unicode字符。在

我不知道为什么这样不行。在


Tags: inpy服务器名称列表downloadlineregion
1条回答
网友
1楼 · 发布于 2024-10-02 20:42:32

不要在SQL查询中插入字符串!请改用SQL参数,由数据库处理引号和Unicode值:

sql = """\
    UPDATE realms_lastmodified
    SET last_modified=?, latest_hash=?
    WHERE region=? AND realm=?
"""
cursor.execute(sql, (lastModified, lastHash, region, realm))

我在这里使用了?作为参数占位符,但这取决于所使用的数据库库;您可能需要使用%s作为占位符(与列的类型无关)。在

您的错误是由于您将编码的bytestrings插值到Unicode值而引起的。也不要这样做;插值,然后编码。否则,Python尝试使用默认的编解码器解码UTF8字节以再次获得Unicode,但在这里失败了。在

相关问题 更多 >