用 python 的 markdown 库转 markdown 为 html 时,需手动添加 html 结构并启用 tables、fenced_code、extra 扩展;纯文本需按行处理并包装 ;推荐 pandoc 命令行工具;务必显式指定 encoding='utf-8' 防编码错误。

用 Python 的 markdown 库转最常见场景(.md → .html)
绝大多数人手头的“文本文档”其实是 Markdown 格式,比如 README.md 或笔记文件。直接用 markdown.markdown() 转就行,但默认不带 HTML 头部和样式——浏览器打开是纯文本,不是真正可浏览的页面。
- 必须手动拼接
<meta charset="utf-8">+ 转换结果 + - 如果原文含表格、代码块、标题,要传
extensions=['tables', 'fenced_code', 'extra'],否则渲染会丢内容 - 别用
markdown2或misaka,它们对中文标点、缩进兼容更差,尤其遇到全角空格或混合制表符时容易崩成一段
import markdown
with open('note.md', encoding='utf-8') as f:
html = markdown.markdown(
f.read(),
extensions=['tables', 'fenced_code', 'extra']
)
with open('note.html', 'w', encoding='utf-8') as f:
f.write(f"<html><head><meta charset="utf-8"></head><body>{html}</body></html>")
纯文本(.txt)硬转 HTML 时怎么保段落和换行
没有标记的 .txt 文件,markdown 会把它当普通字符串整个塞进一个 <p></p> 里,所有换行消失。这时候得自己处理:按行切分、过滤空行、每段包 <p></p>,再把内部的换行替换成 <br>。
- 别用
str.replace('\n', '<br>')粗暴替换——会导致空行变成多余<br>,视觉上多出大段空白 - 推荐逻辑:
text.splitlines()→ 去掉首尾空白 → 跳过空字符串 → 每行f"<p>{line}</p><div class="aritcle_card flexRow"> <div class="artcardd flexRow"> <a class="aritcle_card_img" href="/xiazai/code/10730" title="银色网新企业网站管理系统8.1"><img src="https://img.php.cn/upload/webcode/000/000/009/176346540736401.jpg" alt="银色网新企业网站管理系统8.1" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a href="/xiazai/code/10730" title="银色网新企业网站管理系统8.1">银色网新企业网站管理系统8.1</a> <p>网新企业网站管理系统是专业为个人和企业网站建设而开发的一款智能化程序。该程序基于ASP+ACCESS环境开发,拥有完善的网站前台和后台全智能化管理功能,完全由后台操作(如添加、修改网站基本信息、产品、企业新闻动态等)静态生成前台界面HTML格式网页文件,是个人和企业智能化网站建设首选!</p> </div> <a href="/xiazai/code/10730" title="银色网新企业网站管理系统8.1" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div>" - 如果原文有缩进想保留,得把空格/制表符转成
,但注意别全转,否则影响可读性;建议只对行首连续空格做处理
命令行快速转(不用写脚本)
临时处理单个文件,pandoc 是最稳的选择,比手写 Python 更少出错。
立即学习“前端免费学习笔记(深入)”;
- 基础命令:
pandoc input.txt -o output.html,自动识别格式并加完整 HTML 框架 - 如果是 Markdown:
pandoc README.md -f markdown -t html5 -o index.html,显式指定格式更可靠 - 注意 Windows 上路径含空格时,
input.txt必须用双引号包裹,否则报错Could not find file - 别用
txt2html这类老工具——不维护、不支持 UTF-8、遇到 emoji 直接乱码
中文编码和特殊字符最容易卡在哪
90% 的失败不是语法问题,是编码没对齐。Python 默认用系统编码读文件,Windows 是 gbk,Mac/Linux 是 utf-8,而多数现代文本编辑器(VS Code、Typora)默认存为 UTF-8 带 BOM 或无 BOM。
- 打开文件时务必显式写
encoding='utf-8',哪怕你确定是中文系统 - 如果报错
UnicodeDecodeError: 'gbk' codec can't decode byte,说明文件是 UTF-8 但 Python 用 gbk 读了——加encoding就解决 - HTML 输出后浏览器显示方块字?检查
<meta charset="utf-8">是否在里,且位置靠前
真正麻烦的是混合编码:比如日志文件里夹着 ANSI 颜色码、或从微信复制粘贴带不可见控制字符。这种得先用 chardet 探测编码,再用 encode().decode() 清洗,不是简单加个参数能绕过去的。









