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

Pandas在不同机器上读取CSV时指定编码的行为不一致问题

问题原因

1. 文件传输损坏

你在两台设备上看到的文件看起来一致,大概率是传输过程中出了问题:如果从Mac往树莓派传文件时用了ASCII传输模式(比如部分旧FTP工具默认模式),UTF-8编码下占2字节的é(字节为0xC3 0xA9)会被截断或修改,导致树莓派上的文件实际存储的是无效字节。用UTF-8解码时无效字节会默认替换为?,所以读入后索引匹配会失败。
你可以在两台设备上都执行以下命令验证字节是否一致:

xxd data/team_list.csv | grep 'Jos.*State'

正常UTF-8编码的é对应的字节应为c3a9,如果树莓派返回的字节不同,就是传输导致的文件损坏。

2. 树莓派locale配置异常

如果验证文件字节完全一致,问题就出在树莓派的系统locale配置:如果树莓派默认locale设置为C/POSIX(ASCII编码),即使你明确指定encoding='utf-8',旧版本pandas在处理索引、字符串输出时仍可能调用系统默认编码做转换,导致Unicode字符被替换为问号。
你可以在树莓派上执行locale命令验证,如果LC_ALL、LC_CTYPE等项的值不是UTF-8结尾,就属于配置异常。


解决方法

  1. 确保文件传输一致性
    传输文件时使用二进制模式:scp、rsync等工具默认就是二进制模式,不会修改文件内容;如果用FTP工具,先执行bin命令切换到二进制模式再传输。

  2. 修改树莓派locale为UTF-8
    执行以下命令修改locale配置:

    sudo dpkg-reconfigure locales
    

    在弹出的界面中勾选你需要的UTF-8 locale(比如en_US.UTF-8、zh_CN.UTF-8),并将其设为系统默认,重启终端后生效。

  3. 手动控制编码逻辑(兜底方案)
    如果上述方法都不生效,可以绕过pandas的编码处理,自己读取文件字节解码后再加载为DataFrame,完全屏蔽平台差异:

    import io
    import pandas as pd
    
    with open('data/team_list.csv', 'rb') as f:
        # 手动按UTF-8解码文件字节
        content = f.read().decode('utf-8')
    df = pd.read_csv(io.StringIO(content), names = ['col1', 'col2', 'col3', 'col4'], index_col = 0)
    

内容的提问来源于stack exchange,提问作者Ike348

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:36:06