Windows下Python跨平台处理Unicode字符及CSV读取乱码问题
跨平台处理Unicode CSV文件问题
问题描述
在Linux上开发的PyQt应用迁移到Windows后,读取Linux生成的CSV文件时出现两个问题:
- 终端打印内容乱码
- 无法通过Unicode分隔符
⎈拆分字段,导致字段数量识别错误
示例文件example.csv内容:
♆⎈deux⎈trois⎈quatre⎈cinq ♆⎈two⎈three⎈four⎈five
原测试代码在Windows下输出乱码,且字段长度始终为1;Linux下则能正常识别每条数据包含5个字段。
解决方案
核心问题是文件编码不匹配:Linux默认用UTF-8保存文件,而Windows下Python默认使用系统编码(如GBK)读取,导致Unicode字符解析错误。只需修改文件打开方式,显式指定UTF-8编码,即可实现跨平台一致处理,无需大幅改动原有逻辑。
具体修改
将原代码中的文件打开语句:
fileObj = open('example.csv', 'r')
替换为:
fileObj = open('example.csv', 'r', encoding='utf-8')
可选健壮性优化(非强制)
推荐使用with语句自动管理文件句柄(无需手动调用close()),修改后的完整代码:
stop_char = '♆' with open('example.csv', 'r', encoding='utf-8') as fileObj: end = False while True: line = '' while True: char = fileObj.read(1) if char == stop_char: break if not char: break line += char if not char: end = True print('line is ' + line) if line != '': x_array = line.split('⎈') print('length of line is ' + str(len(x_array))) if end: break
验证结果
修改后在Windows终端运行,输出与Linux完全一致:
(.venv) PS E:\project> python testRead.py line is line is ⎈deux⎈trois⎈quatre⎈cinq length of line is 5 line is ⎈two⎈three⎈four⎈five length of line is 5
终端乱码补充处理
如果Windows终端仍显示乱码,可通过以下方式解决:
- 使用Windows Terminal(默认支持Unicode)替代旧版命令提示符
- 在代码开头添加:
import sys sys.stdout.reconfigure(encoding='utf-8')
内容的提问来源于stack exchange,提问作者Meaulnes
相关产品推荐
相关产品推荐

