使用Python脚本批量转换网页文件编码为UTF-8
作者:weixin_46244623
文章介绍了一个自动化脚本,用于将通过浏览器另存为功能保存的网页文件从GBK转换为UTF-8编码,以解决中文乱码问题,并保持源目录结构,该脚本支持文本和二进制文件的处理,易于使用和扩展,需要的朋友可以参考下
一、背景与痛点
当我们使用浏览器的“另存为”功能保存网页时,经常会遇到以下问题:
- 保存下来的 HTML、CSS、JS 文件使用的是本地编码(如
GBK或GB2312); - 在现代开发环境或服务器中,UTF-8 是标准编码;
- 直接使用这些文件会导致 中文乱码,影响阅读或部署;
- 手动逐个转换效率极低,尤其当网页包含大量资源文件(图片、脚本、样式表)时。
为此,我编写了一个 自动化脚本,可一键完成:
✅ 自动检测原始编码
✅ 将文本文件转为 UTF-8
✅ 二进制文件(如图片)原样复制
✅ 完整保留源目录结构
二、核心思路
- 遍历源目录下所有文件;
- 根据文件扩展名判断是否为文本文件;
- 对文本文件:
- 用
chardet检测原始编码; - 解码后以 UTF-8 重新写入目标目录;
- 用
- 对非文本文件(如图片):
- 直接二进制复制,不做任何修改;
- 使用相对路径保持目录结构一致。
三、完整可运行代码
将以下代码保存为 convert_webpage_to_utf8.py,放在与你的网页文件夹同级目录下即可运行:
import os
import chardet
import shutil
# ========== 配置区 ==========
SRC_DIR = "另存的网页" # 源文件夹(请确保此目录存在)
DST_DIR = "output_utf8" # 输出文件夹(脚本会自动创建)
# 被视为“文本文件”的扩展名(会进行编码转换)
TEXT_EXTS = (
".html", ".htm", ".css", ".js", ".txt", ".json", ".xml", ".下载"
)
# ========== 工具函数 ==========
def ensure_dir_for_file(path):
"""确保文件所在目录存在"""
dir_path = os.path.dirname(path)
if dir_path:
os.makedirs(dir_path, exist_ok=True)
def convert_text(src_path, dst_path):
"""将文本文件转为 UTF-8"""
with open(src_path, "rb") as f:
raw = f.read()
# 自动检测编码,失败时 fallback 到 gb18030(兼容 GBK/GB2312)
result = chardet.detect(raw)
enc = result.get("encoding") or "gb18030"
try:
text = raw.decode(enc, errors="ignore") # 忽略非法字符
ensure_dir_for_file(dst_path)
with open(dst_path, "w", encoding="utf-8") as f:
f.write(text)
print(f"✅ 文本 {src_path} [{enc}] → UTF-8")
except Exception as e:
print(f"❌ 文本失败 {src_path}: {e}")
def copy_binary(src_path, dst_path):
"""直接复制二进制文件"""
try:
ensure_dir_for_file(dst_path)
shutil.copyfile(src_path, dst_path)
print(f"📦 二进制 {src_path} → 原样拷贝")
except Exception as e:
print(f"❌ 拷贝失败 {src_path}: {e}")
# ========== 主逻辑 ==========
if __name__ == "__main__":
if not os.path.exists(SRC_DIR):
print(f"❌ 源目录 '{SRC_DIR}' 不存在,请检查!")
exit(1)
for root, _, files in os.walk(SRC_DIR):
for name in files:
src = os.path.join(root, name)
rel = os.path.relpath(src, SRC_DIR) # 获取相对于源目录的路径
dst = os.path.join(DST_DIR, rel) # 构建目标路径
lower = name.lower()
if lower.endswith(TEXT_EXTS):
convert_text(src, dst)
else:
copy_binary(src, dst) # 非文本文件一律原样拷贝
print(f"\n🎉 处理完成!结果已保存至 '{DST_DIR}' 目录。")
四、使用方法
安装依赖(首次运行需要):
pip install chardet
准备数据:
- 将你从浏览器“另存为”的整个网页文件夹重命名为
另存的网页(或修改脚本中的SRC_DIR); - 确保该文件夹与脚本在同一目录下。
运行脚本:
python convert_webpage_to_utf8.py
查看结果:
- 所有文件将被复制到
output_utf8/; - 文本文件已转为 UTF-8 编码,中文不再乱码;
- 图片、图标等资源保持原样。
五、注意事项
.下载文件处理:某些浏览器(如 Chrome)会生成.xxx.download临时文件,若其内容是 HTML/JS,也应转码;- 编码识别容错:
chardet对短文本可能不准,但对完整网页通常可靠;fallback 使用gb18030覆盖绝大多数中文场景; - 安全策略:非文本文件一律不处理,避免损坏图片、字体等二进制资源;
- 扩展支持:如需处理
.md、.csv等,只需在TEXT_EXTS中添加对应后缀。
六、结语
这个脚本已在多个实际项目中验证,能高效解决“另存网页中文乱码”这一常见痛点。代码简洁、健壮、易修改,适合集成到自动化流程中。
到此这篇关于使用Python脚本批量转换网页文件编码为UTF-8的文章就介绍到这了,更多相关Python网页文件编码转UTF-8内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
