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

Python打印含繁体中文的Tableau交叉表结果编码异常求助

繁体中文交叉表打印乱码问题解决建议

问题背景

从Tableau获取包含繁体中文的交叉表数据后,打印时出现乱码或编码错误,测试代码及对应输出如下:

测试代码

import sys
sys.stdout.reconfigure(encoding='utf-8')
...
view_data_raw = querying.get_view_data_dataframe(
    conn, view_id=visual_c_id)
print(view_data_raw.to_string()) #A
print(view_data_raw.to_string().encode(encoding='utf-8')) #B
print(view_data_raw.to_string().encode(encoding='cp1252')) #C
print(view_data_raw.to_string().encode(encoding='gbk')) #D

各输出情况

  • #A:2023å¹´4æ1æ¥(预期为2023年4月1日)
  • #B:2023\xc3\xa5\xc2\xb9\xc2\xb44\xc3\xa6\xc2\x9c\xc2\x881\xc3\xa6\xc2\x97\xc2\xa5(预期为2023年4月1日)
  • #C:抛出UnicodeEncodeError: 'charmap' codec can't encode characters in position 8-9: character maps to <undefined>
  • #D:抛出UnicodeEncodeError: 'gbk' codec can't encode character '\xe4' in position 4: illegal multibyte sequence

解决步骤

1. 确认DataFrame内数据的编码状态

先排查数据在DataFrame中是否已为正确的Unicode字符串,避免获取阶段就出现编码偏差:

# 打印单个单元格内容,检查是否正常显示繁体中文
print(view_data_raw.iloc[0, 0])
# 确认数据类型为str(Python原生Unicode字符串)
print(type(view_data_raw.iloc[0, 0]))

如果此处显示乱码,说明从Tableau获取数据时存在编码问题,可尝试手动解码原始数据:

# 若获取的是字节流,强制用utf-8解码后再转DataFrame
raw_data = querying.get_view_data(conn, view_id=visual_c_id)
view_data_raw = pd.read_csv(pd.io.common.StringIO(raw_data.decode('utf-8')))

2. 修复标准输出的编码配置

sys.stdout.reconfigure(encoding='utf-8')在部分终端环境(如Windows CMD)中可能不生效,改用以下方式强制设置输出编码:

import sys
import codecs

# 将标准输出替换为utf-8编码流
sys.stdout = codecs.getwriter('utf-8')(sys.stdout.detach())

# 直接打印DataFrame即可
print(view_data_raw.to_string())

3. 避免重复编码操作

测试中B/C/D均对已为str类型的内容重复编码,导致输出字节串而非可读文本,直接打印str类型数据即可,无需额外调用encode。

4. 适配终端环境编码

若使用Windows终端,默认编码非utf-8时,先执行终端编码切换命令:

chcp 65001

再运行Python脚本,即可正常显示繁体中文。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 20:25:18