【问题标题】:pyodbc - 'utf-8' codec can't decode byte 0xa0 in position n: invalid start bytepyodbc - 'utf-8' 编解码器无法解码位置 n 中的字节 0xa0:无效的起始字节
【发布时间】:2021-06-12 20:53:43
【问题描述】:

我正在使用 pyodbc 从 sql 查询中读取数据帧,但一直收到错误消息,提示 'utf-8' codec can't decode byte 0xa0 in position n: invalid start byte。代码如下。如何修复此错误?谢谢

import pyodbc
import pandas as pd
conn = pyodbc.connect('DRIVER={SQL Server};SERVER=SSXBYXSQL107,5269;DATABASE=INV_Q1;Trusted_Connection=yes;')
conn.setencoding(encoding='utf-8')
conn.setdecoding(pyodbc.SQL_CHAR, encoding='utf-8')
conn.setdecoding(pyodbc.SQL_WCHAR, encoding = 'utf-8')

sql_query="select [inventory_desc] from [INV_Q1].[INV_Detail].[Inventory]"
df_inv=pd.read_sql(sql_query, conn)

【问题讨论】:

  • 该错误意味着您的数据库未向您提供 UTF-8 数据。怎么修?选择数据的编码,或告诉您的数据库客户端以预期的编码向您提供数据。

标签: sql-server python-3.x utf-8 pyodbc


【解决方案1】:

至少目前,SQL Server 不会将 Unicode 字符作为 UTF-8 发送;它将它们作为 UTF-16LE 发送,而 UTF-16 是 pyodbc 期望的默认编码。那些setencoding/setdecoding 调用不适用于与 SQL Server 的连接。

pyodbc wiki中提到的:

SQL Server 的最新驱动程序符合 [ODBC] 规范,因此无需配置。建议使用 pyodbc 默认值。

【讨论】:

    猜你喜欢
    • 2018-06-12
    • 1970-01-01
    • 2023-01-11
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 2020-06-22
    相关资源
    最近更新 更多