news 2026/5/1 3:52:13

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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’ 导致的。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/29 17:47:51

答辩现场,评审组教授最不满意的 5 种回答方式,切记!切记!切记!

很多同学在答辩结束后都会说一句话&#xff1a;“其实我都会&#xff0c;但不知道为什么老师一直追问。”问题往往不在不会&#xff0c; 而在回答方式不对。站在评审组教授的角度&#xff0c; 下面这 5 种回答方式&#xff0c; 是最容易让他们皱眉、甚至继续追问的。一、“这个…

作者头像 李华
网站建设 2026/4/23 10:15:12

程序员必看!企业级私有化部署开源大模型选型与实战指南(建议收藏)

文章介绍了支持私有化部署的开源大模型选型与部署指南&#xff0c;包括国际主流和中文优秀模型。详细分析了个人开发、中小企业和大规模生产三种场景下的硬件配置、软件框架和性价比方案&#xff0c;帮助企业和开发者根据需求选择合适的模型和部署架构&#xff0c;实现数据安全…

作者头像 李华
网站建设 2026/4/23 19:13:01

从零开始:Gitee 仓库创建与本地项目纳管全流程详解

目录 一、Gitee 仓库创建:打好代码托管的基础 1.1 准备工作 1.2 仓库创建步骤 二、本地生成 SSH 公钥:实现免密提交代码 2.1 SSH 公钥的作用原理 2.2 本地生成 SSH 公钥的步骤 步骤 1:检查 Git 环境 步骤 2:打开命令行工具 步骤 3:执行生成公钥的命令 2.3 将公钥…

作者头像 李华
网站建设 2026/4/27 16:27:28

走向全栈:前后端状态认知差异与设计边界的深度探讨

文章目录 引言&#xff1a;为何关注前后端状态认知差异全栈开发的兴起与前后端分离的现状状态管理在现代应用中的重要性前后端协作中的常见误解 登录态的归属&#xff1a;前端状态还是后端状态&#xff1f;登录态的定义与实现方式前端如何管理登录态后端对登录态的支持与要求案…

作者头像 李华
网站建设 2026/4/4 3:56:45

Java毕设选题推荐:基于Java的小说三体科幻社区管理系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华