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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 05:42:38