You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3查询MSSQL返回希腊字符显示乱码问题求助

问题根源

你遇到的是MSSQL数据库返回的Unicode字符被驱动错误解码的问题:

  • MSSQL中NVARCHAR类型的字段默认以UTF-16LE编码存储内容,你使用的Python数据库驱动(pymssql/pyodbc)默认用Latin1(ISO-8859-1)编码解析返回的字节流,因此得到了乱码字符串
  • 你对last_name额外调用了encode('utf-8'),相当于把已经错误解码的字符串再次编码,输出就成了带\xff\xfe(UTF-16LE的BOM标识)的字节串
解决方法

临时快速修复

不需要修改数据库连接配置,直接对返回的字符串做二次编码解码即可得到正确内容:

for row in result:
    # 还原last_name:把错误编码的字节用UTF-16LE解码
    last_name = row[1].encode('utf-8').decode('utf-16le')
    print('Last Name: ' + last_name)
    # 还原first_name:先把错误用Latin1解码的字符串转成原始字节,再用UTF-16LE解码
    first_name = row[2].encode('latin1').decode('utf-16le')
    print('First Name: ' + first_name)

永久根治方案

修改数据库连接配置,让驱动自动处理编码转换,不需要每次手动转码:

  • 如果你使用pyodbc连接,在连接字符串中添加ClientCharset=UTF-8和TDS_Version=7.4参数
  • 如果你使用pymssql连接,初始化连接时指定charset='utf8'参数:
import pymssql
conn = pymssql.connect(
    server='你的服务器地址',
    user='数据库用户名',
    password='数据库密码',
    database='数据库名',
    charset='utf8'
)

同时确认MSSQL中存储姓名的字段类型为NVARCHAR而非VARCHAR,后者默认不支持Unicode字符存储。

内容的提问来源于stack exchange,提问作者David Dan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 15:09:01