Python中如何解决常见的编码问题?

import csv

with open(“demo.csv”,“w”,encoding= “utf-8”) as f: w = csv.writer(f) w.writerow(u’\u22ef’)

结果写进 csv 的是乱码,采用 gb18030 编码写进 csv 的是"??",如果不添加 encoding 就会报 gbk 错误

如果单纯只是print(u'\u22ef'),结果是“……”,请问如何才能将省略号写入 csv。

谢谢!


Python中如何解决常见的编码问题?

7 回复

代码里面 encoding 不是 utf-8 么?和 gb18030 的关系是?
你用个能用 UTF-8 编码打开文件的文本编辑器应该就正常了。


处理Python编码问题,核心是理解“编码/解码”过程。常见问题及解决方案如下:

1. 文件读写编码问题

# 明确指定编码(推荐utf-8)
with open('file.txt', 'r', encoding='utf-8') as f:
    content = f.read()

with open('file.txt', 'w', encoding='utf-8') as f:
    f.write('内容')

2. 字符串与字节转换

# 字符串转字节(编码)
text = "你好"
bytes_data = text.encode('utf-8')  # b'\xe4\xbd\xa0\xe5\xa5\xbd'

# 字节转字符串(解码)
original_text = bytes_data.decode('utf-8')  # "你好"

3. 处理不同编码的数据

def convert_encoding(data, from_enc, to_enc='utf-8'):
    """转换编码"""
    if isinstance(data, str):
        # 如果是字符串,先编码再解码
        return data.encode(from_enc).decode(to_enc)
    elif isinstance(data, bytes):
        # 如果是字节,直接解码再编码
        return data.decode(from_enc).encode(to_enc)
    return data

# 示例:gbk转utf-8
gbk_text = "测试".encode('gbk')
utf8_text = convert_encoding(gbk_text, 'gbk', 'utf-8')

4. 处理含BOM的文件

import codecs

# 读取带BOM的UTF-8文件
with codecs.open('file.txt', 'r', 'utf-8-sig') as f:
    content = f.read()  # 自动去除BOM

# 写入带BOM的文件
with codecs.open('file.txt', 'w', 'utf-8-sig') as f:
    f.write('内容')

5. 处理网络请求编码

import requests

resp = requests.get('http://example.com')
# 自动检测编码
resp.encoding = resp.apparent_encoding
text = resp.text

6. 数据库编码处理

import pymysql

conn = pymysql.connect(
    host='localhost',
    user='root',
    password='',
    database='test',
    charset='utf8mb4'  # 支持4字节UTF-8
)

通用建议:

  • 项目内部统一使用UTF-8编码
  • 所有I/O操作明确指定编码
  • 使用sys.getdefaultencoding()检查默认编码
  • 对不确定编码的数据,先尝试常见编码(utf-8, gbk, latin-1)

一句话总结:统一用UTF-8,读写都显式指定编码。

换 Python3 试试?

UTF-8 编码的 csv 文件需要加 BOM 头,Excel 才能正确识别:

import csv
import codecs

with open(“demo.csv”,“wb”) as f:
-> f.write(codecs.BOM_UTF8)

with open(“demo.csv”,“a”,encoding=“utf-8”) as f:
-> w = csv.writer(f)
-> w.writerow(u’\u22ef’)

如果乱码是指用 excel 打开看到话应该是楼上说的原因.
或者用 excel 的导入功能, 可以正常打开 utf8 格式的 csv

一直使用的都是 py3,对于 py2 了解有限,不过你楼下已经给出了解答,还是谢谢

感谢,已测可行

回到顶部