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

Python解析CSV文件转字典时遇UnicodeEncodeError问题求助

解决CSV读取中的Unicode字符串显示与编码错误问题

兄弟,我太懂这种糟心的情况了——明明调试看着值是对的,一跑代码就炸编码错误,还冒出个u'Egg'的奇怪前缀。咱们一步步拆解解决:

首先得搞清楚:u'xxx'是Python 2里Unicode字符串的标识,本身不是bug,只是Python 2用来区分字节串(普通str)和Unicode的方式。而你遇到的UnicodeEncodeError,核心原因是Python 2默认用ASCII编码去转换包含非ASCII字符(比如你例子里的ü)的Unicode字符串,ASCII管不了这些特殊字符,自然就报错了。调试时显示正常,是因为调试工具偷偷帮你做了编码转换,代码里没处理就露馅了。

下面给你几个针对性的解决方案:

1. 读取CSV时就统一用Unicode处理

Python 2的csv模块对Unicode支持不太友好,直接用open读容易出问题,建议用codecs模块指定编码读取:

import csv
import codecs

# 把'utf-8'换成你CSV文件实际的编码(比如gbk、cp1252)
with codecs.open('your_data.csv', 'r', encoding='utf-8') as f:
    reader = csv.reader(f)
    for row in reader:
        # 这里的每个元素都是Unicode字符串,不用再手动转换
        print(row)

2. 转换Unicode字符串时指定正确编码

别直接用str(city),这会触发默认的ASCII编码。要显式指定编码(比如utf-8)把Unicode转成字节串:

# 错误写法:会触发UnicodeEncodeError
# str(city)

# 正确写法:用utf-8编码成字节串
city_str = city.encode('utf-8')
print(city_str)

3. 给Python 2加个"Unicode全局开关"

在代码最开头加上这句,让所有字符串字面量默认是Unicode类型,减少str和unicode混用的坑:

from __future__ import unicode_literals

4. 输出/写入时也要注意编码

如果是输出到终端或者写入文件,确保目标环境支持你用的编码。比如写入文件时:

with open('output.txt', 'w') as f:
    # 先把Unicode编码成utf-8字节串再写入
    f.write(city.encode('utf-8'))

最后提醒下:先确认你的CSV文件本身的编码是什么(比如用Notepad++查看编码),读取时的encoding参数要和文件实际编码一致,不然还是会乱码哦。

内容的提问来源于stack exchange,提问作者Patrick.H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:24:07