You need to enable JavaScript to run this app. Windows下Python tabulate生成fancy_grid表格控制台正常,写文件报编码错
优惠活动
大模型
产品
解决方案
定价
更多

Windows下Python tabulate生成fancy_grid表格控制台正常,写文件报编码错

问题核心原因
  • fancy_grid格式生成的表格由大量Unicode制表符(如╔、═、╗、║等非ASCII字符)组成,控制台打印正常是因为当前Windows终端默认开启了UTF-8字符渲染支持。
  • Windows环境下Python打开文件执行写入操作时,默认采用cp1252西语编码规则,该编码无法识别上述Unicode制表符,因此在执行写入逻辑时直接抛出UnicodeEncodeError。
  • 普通格式表格可正常写入、导出docx时也触发同类报错,本质都是默认编码未兼容非ASCII字符集导致,和tabulate格式、导出的文件格式本身无直接关联。
解决方法

方法1:写入文件时显式指定UTF-8编码

这是最直接的修复方案,修改原有open函数的调用参数,增加编码声明即可:

from tabulate import tabulate
import os  # 补充原有代码遗漏的os模块导入,避免调用startfile时触发名称未定义报错

l = [['{:<118}.'.format("Hassan"), 21, "LUMS"], ["Ali", 22, "FAST"], ["Ahmed", 23, "UET"]]
table = tabulate(l, headers=['Name', 'Age', 'University'], tablefmt='fancy_grid', showindex="always")

# 新增encoding="utf-8"参数,匹配Unicode制表符的编码要求
with open("C:\\Users\\John\\Desktop\\kaita.txt", "w", encoding="utf-8") as outf:
    outf.write(table)

os.startfile("C:\\Users\\John\\Desktop\\kaita.txt", "print")

注意:Windows 10 1903及以上版本的记事本、打印组件均可正常识别UTF-8编码的文本,不会出现乱码;若使用老版本Windows打开出现乱码,可在记事本的打开弹窗中手动选择UTF-8编码加载文件。

方法2:带BOM标识的UTF-8写入

如果需要让系统、打印组件更准确识别文件编码,省去手动选择编码的操作,可以将编码参数替换为utf-8-sig:

# utf-8-sig会在文件开头自动写入UTF-8 BOM标识,系统识别编码的准确率更高
with open("C:\\Users\\John\\Desktop\\kaita.txt", "w", encoding="utf-8-sig") as outf:
    outf.write(table)
  • 该编码格式与纯UTF-8的内容完全兼容,仅多了3字节的编码标识头,不会影响表格内容的正常渲染,也不会破坏打印效果。
  • 之前尝试导出docx时遇到的同类编码报错,只要在文本拼接写入环节保证采用UTF-8规则处理字符串,同样可以解决这类编码不兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.09 08:45:03