当前位置: 首页 > news >正文

UnicodeDecodeError: ‘charmap‘ codec can‘t decode byte 0x81 in position 17: character maps to <undefi

目录

    • 问题
    • 原因分析
      • 1. **编码不匹配**
      • 2. **常见场景**
    • 解决方案
      • **方案1:设置正确的字符集连接MySQL**
      • **方案2:Python脚本中的解决方案**
      • **方案3:检查并设置系统环境编码**
      • **方案4:MySQL服务器端配置检查**
      • **方案5:在代码中明确处理编码**
    • 预防措施
    • 调试步骤

问题

连接MySQL服务,查询到结果后,本地解析报错
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 17: character maps to <undefined>

这个错误通常是由于字符编码不一致导致的。

原因分析

1.编码不匹配

  • MySQL服务器使用的字符集(如UTF-8)与本地解码时使用的字符集(如Windows的cp1252、gbk等)不一致
  • 特别是当数据中包含非ASCII字符(如中文、特殊符号)时容易出现

2.常见场景

  • 在Windows系统或某些终端环境中运行Linux命令/脚本
  • MySQL数据包含中文或其他多字节字符
  • 默认编码设置不正确

解决方案

方案1:设置正确的字符集连接MySQL

# 在连接时指定字符集mysql -hhostname-u username -p --default-character-set=utf8mb4 database_name# 或者在查询前设置mysql -hhostname-u username -p mysql>SET NAMES'utf8mb4';mysql>SELECT * FROM table;

方案2:Python脚本中的解决方案

如果使用Python连接MySQL:

importpymysql# 正确设置连接字符集connection=pymysql.connect(host='localhost',user='username',password='password',database='dbname',charset='utf8mb4',cursorclass=pymysql.cursors.DictCursor)# 或者使用mysql-connectorimportmysql.connector conn=mysql.connector.connect(charset='utf8mb4',use_unicode=True,# ... 其他参数)

方案3:检查并设置系统环境编码

# 查看当前系统编码echo$LANGlocale# 设置正确的编码(添加到~/.bashrc或~/.profile)exportLANG=en_US.UTF-8exportLC_ALL=en_US.UTF-8# 临时设置exportPYTHONIOENCODING=utf-8

方案4:MySQL服务器端配置检查

-- 查看当前字符集设置SHOWVARIABLESLIKE'character_set%';SHOWVARIABLESLIKE'collation%';-- 修改表的字符集(如果需要)ALTERTABLEyour_tableCONVERTTOCHARACTERSETutf8mb4COLLATEutf8mb4_unicode_ci;

方案5:在代码中明确处理编码

对于Python脚本:

# 方法1:指定编码打开文件withopen('output.txt','w',encoding='utf-8')asf:f.write(data)# 方法2:手动解码decoded_string=byte_data.decode('utf-8',errors='ignore')# 或 errors='replace'# 方法3:使用编解码器模块importcodecswithcodecs.open('file.txt','r',encoding='utf-8')asf:content=f.read()

预防措施

  1. 统一使用UTF-8/UTF8MB4

    • MySQL连接、表字段、应用程序统一使用utf8mb4
    • 这是最推荐的做法
  2. 检查MySQL配置

    -- 永久修改配置(在my.cnf中)[client]default-character-set=utf8mb4[mysql]default-character-set=utf8mb4[mysqld]character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci
  3. Python环境设置

    # 在脚本开头添加importsysimportio sys.stdout=io.TextIOWrapper(sys.stdout.buffer,encoding='utf-8')

调试步骤

  1. 首先确认MySQL数据的实际编码
  2. 检查连接时的字符集设置
  3. 验证本地环境的编码配置
  4. 逐步测试每个环节的编码转换

建议使用UTF-8系列编码(特别是utf8mb4)作为标准,可以避免大部分字符编码问题。

最后排查下来,上面报错问题原因是连接MySQL 8时,连接参数中字符集使用了’utf-8’ 导致的。

http://www.jsqmd.com/news/299522/

相关文章:

  • golang中使用 sort.Interface 实现复杂多级排序
  • MySQL 中的 utf8 vs utf8mb4 区别
  • 指针,C语言的灵魂与噩梦:从入门到“放弃”的终极指南 [特殊字符]
  • SAGE-Net:融合语义信息的自动驾驶注意力预测框架
  • Flutter for OpenHarmony:用 StatefulWidget 实现基础用户交互
  • 【读论文】EQ情感智能benchmark:EmoBench
  • YOLO26改进 - 采样 | 小目标分割救星:HWD 降采样少丢细节提精度
  • 【统一功能处理】从入门到源码:拦截器学习指南(含适配器模式深度解读) - 教程
  • 洛谷 P1918:保龄球 ← STL map
  • 详细介绍:C++蓝桥杯之结构体10.15
  • 抖店商品图如何保存到手机上的方法
  • 云端推理中的模型量化技术:减小体积提升速度
  • C++实现ATM状态机
  • 导师严选2026 AI论文工具TOP10:自考论文写作全攻略
  • Java毕设项目推荐-基于SpringBoot的社区公益服务管理平台 基于springboot的社区志愿者服务系统【附源码+文档,调试定制服务】
  • 【计算机毕业设计案例】基于springboot的居民志愿服务智慧系统社区志愿者服务系统(程序+文档+讲解+定制)
  • 学长亲荐8个AI论文平台,助你搞定本科毕业论文!
  • 论文《关于预防人工智能反叛的初步探讨》修订版
  • SMU 2026 ptlks的周报Week 1
  • 2025年少儿编程推荐:五家优选品牌深度全面对比解析
  • 用 CrossOver 体验“魔法世界”:在 Mac 电脑畅玩《霍格沃茨之遗》保姆级教程
  • 2025年少儿编程哪家靠谱?主流上榜五家品牌全面深度解析
  • GLM-ASR-Nano-2512:中文方言识别与低音量语音处理的最佳开源方案
  • 2026年AI智能体替代员工:从理论到实践,小白也能上手的数字员工教程
  • 从入门到精通:RAG系统中检索与生成之间的增强层,收藏级技术指南
  • 【超详细】大模型学习路线图,从入门到应用(建议收藏)
  • 如何系统化的学习金融,投资,理财?
  • 字符串相关
  • 兰亭妙微:以交互与网站设计之力,重塑行业门户新标杆
  • 兰亭妙微:以HTML前端、UI/交互/图标设计赋能数字孪生与大屏设计新标杆