Python错误解决:UnicodeEncodeError: 'latin-1' codec can't encode characters in position

本文介绍了一个关于使用Python3的PyMysql模块连接数据库时遇到的问题,即无法插入数据并出现异常的情况。通过指定正确的字符集(charset='utf8'),成功解决了这一问题。

在使用Python3的模块PyMysql连接数据库时,怎么都无法插入,报了这个异常

各种倒腾后发现是在连接的时候没有指定以什么编码连接导致的错误

之前的代码:

#!/usr/bin/python3

import pymysql


def insert_law(title, content):
    # 打开数据库连接
    db = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='root', db='law')

    # 使用cursor()方法获取操作游标
    cursor = db.cursor()

    # SQL 插入语句
    sql = 'INSERT INTO tb_law(title, content) \
           VALUES (\'%s\', \'%s\' )' % \
          (title, content)
    try:
        # 执行sql语句
        cursor.execute(sql)
        # 执行sql语句
        db.commit()
    except Exception as e:
        print(e)
        db.rollback()

    # 关闭数据库连接
    db.close()

在pymysql.connect 之后指定 charset='utf8'

#!/usr/bin/python3

import pymysql


def insert_law(title, content):
    # 打开数据库连接
    db = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='root', db='law', charset='utf8')

    # 使用cursor()方法获取操作游标
    cursor = db.cursor()

    # SQL 插入语句
    sql = 'INSERT INTO tb_law(title, content) \
           VALUES (\'%s\', \'%s\' )' % \
          (title, content)
    try:
        # 执行sql语句
        cursor.execute(sql)
        # 执行sql语句
        db.commit()
    except Exception as e:
        print(e)
        db.rollback()

    # 关闭数据库连接
    db.close()

错误解决

这个错误通常发生在使用 Python 导出数据到 Excel 文件时,数据中包含非 `latin-1` 编码范围内的字符(如中文、日文、韩文等)。`latin-1` 编码仅支持 0~255 的字符,而 Unicode 字符(如中文)的编码超出了这个范围。 ### 常见原因 - 你使用了 `pandas.DataFrame.to_csv()` 并指定默认编码为 `'latin-1'`。 - 数据中包含中文、表情符号等非 ASCII 字符。 --- ### 解决方案 #### ✅ 方法一:使用 UTF-8 编码导出 CSV 文件 ```python import pandas as pd # 示例 DataFrame df = pd.DataFrame({ '姓名': ['张三', '李四', '王五'], '成绩': [85, 92, 88] }) # 使用 UTF-8 编码导出 df.to_csv('学生数据.csv', index=False, encoding='utf-8-sig') ``` - `encoding='utf-8-sig'`:适用于 Excel 打开时正确识别中文,它会在文件开头添加 BOM 标记。 - 如果你使用的是 Linux 或其他系统,也可以使用 `utf-8`,但在 Windows 上推荐使用 `utf-8-sig`。 --- #### ✅ 方法二:如果使用 `openpyxl` 或 `xlsxwriter` 导出 Excel (.xlsx) ```python import pandas as pd # 示例 DataFrame df = pd.DataFrame({ '姓名': ['张三', '李四', '王五'], '成绩': [85, 92, 88] }) # 导出为 Excel 文件 df.to_excel('学生数据.xlsx', index=False) ``` - 使用 `to_excel()` 方法时不会出现编码问题,因为 `openpyxl` 默认支持 Unicode。 - 确保你已安装 `openpyxl`:`pip install openpyxl` --- #### ✅ 方法三:在写入文件时手动指定编码 如果你是手动写入文件,比如使用 `csv` 模块: ```python import csv data = [ ['姓名', '成绩'], ['张三', 85], ['李四', 92] ] with open('学生数据.csv', 'w', newline='', encoding='utf-8-sig') as f: writer = csv.writer(f) writer.writerows(data) ``` --- ### 总结 | 方法 | 使用场景 | 推荐指数 | |------|----------|----------| | `to_csv(encoding='utf-8-sig')` | 导出 CSV | ⭐⭐⭐⭐ | | `to_excel()` | 导出 XLSX | ⭐⭐⭐⭐⭐ | | `csv.writer(encoding='utf-8')` | 手动写入 CSV | ⭐⭐⭐ | --- ###
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值