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: