MySQLDB 'utf-8' 编解码器的问题无法解码字节 0x92

Posted

技术标签:

【中文标题】MySQLDB \'utf-8\' 编解码器的问题无法解码字节 0x92【英文标题】:Issue with MySQLDB 'utf-8' codec can't decode byte 0x92MySQLDB 'utf-8' 编解码器的问题无法解码字节 0x92 【发布时间】:2020-06-08 15:26:18 【问题描述】:

我在使用 mysqldb 运行查询时遇到问题。我有以下错误信息

': 'utf-8' codec can't decode byte 0x92 in position 2: invalid start byte

我过去能够运行此查询而没有编码问题,因此我不知道我的问题来自哪里。 我所做的唯一更改是在我的笔记本电脑上下载 Postgres 并删除(意外)一个 db.sqlite3 文件。但我不明白为什么这会影响我的查询编码,特别是因为我没有任何特殊字符。运行更简单的查询可以正常工作,并且从我同事的笔记本电脑上运行此查询也可以。

查询如下:

SLEEPERS_QUERY = """
select * from candidates"""
import MySQLdb as db


with SSHTunnelForwarder(
    ssh_address_or_host = host,
    ssh_port = 22,
    ssh_username = ssh_username,
    ssh_pkey = ssh_private_key,
    remote_bind_address = (rds, 3306), # 3306 = mysql port
) as server:
    server.start()
    print('Connected to the SSH server')

    while True:
        try:
            conn = db.connect(
                host = localhost,
                port = server.local_bind_port,
                user = user,
                passwd = password,
                db = database
            )
            print('Connected to the database server')
            break

        except: pass
    df = pd.read_sql_query(query,conn)

return df

【问题讨论】:

根据alanwood.net/demos/ansi.html,0x92是一个“聪明”的右单引号,只有windows使用——unicode中不存在该字符,因此无法被utf解码-8 编解码器...但我们在您的示例中看不到该字符(??),这很奇怪。也许您的文件是由 Windows 机器编辑的? 嘿@Everett,谢谢你的回答。是的,我们确实是两个人在做这个,我的同事在 linux 下(但不是 windows)。 而且我的代码中没有单引号。我很困惑 这确实很奇怪......有时我在复制 + 粘贴查询时被咬了(尤其是来自网络或消息客户端),有时我不得不诉诸字面意思重新- 键入查询以确保没有奇怪的字符(例如隐藏字符)出现在我的输入中。希望有人有更好的建议,但可能值得一试(?)。 我试过了,但没有解决。看来是我环境的问题,但我还是没有解决 【参考方案1】:

我找到了解决方案:我的默认编码从 latin1 更改为 utf8。

我必须添加charset = 'latin1'

conn = db.connect(
            host = localhost,
            port = server.local_bind_port,
            user = user,
            passwd = password,
            db = database,
            charset = 'latin1'
            )

【讨论】:

以上是关于MySQLDB 'utf-8' 编解码器的问题无法解码字节 0x92的主要内容,如果未能解决你的问题,请参考以下文章

DBT snowflake utf-8' 编解码器无法解码位置 1031 中的字节 0xa0:无效的起始字节

'utf-8'编解码器无法解码位置8的字节0xfc:无效的起始字节

'utf8'编解码器在python中解码('utf-8')时无法解码字节0xc3

colab中的Python Pandas:UnicodeDecodeError:'utf-8'编解码器无法解码位置0的字节0xd3:无效的延续byteUnicodeDecodeError:

UnicodeDecodeError:'utf-8'编解码器无法解码位置1中的字节0x8b:无效的起始字节

'utf-8'编解码器无法解码位置1中的字节0xf4:无效的连续字节