使用Python脚本批量转换网页文件编码为UTF-8

 更新时间:2026年01月23日 08:24:20   作者:weixin_46244623  
文章介绍了一个自动化脚本,用于将通过浏览器另存为功能保存的网页文件从GBK转换为UTF-8编码,以解决中文乱码问题,并保持源目录结构,该脚本支持文本和二进制文件的处理,易于使用和扩展,需要的朋友可以参考下

一、背景与痛点

当我们使用浏览器的“另存为”功能保存网页时,经常会遇到以下问题:

  • 保存下来的 HTML、CSS、JS 文件使用的是本地编码(如 GBKGB2312);
  • 在现代开发环境或服务器中,UTF-8 是标准编码;
  • 直接使用这些文件会导致 中文乱码,影响阅读或部署;
  • 手动逐个转换效率极低,尤其当网页包含大量资源文件(图片、脚本、样式表)时。

为此,我编写了一个 自动化脚本,可一键完成:
✅ 自动检测原始编码
✅ 将文本文件转为 UTF-8
✅ 二进制文件(如图片)原样复制
✅ 完整保留源目录结构

二、核心思路

  1. 遍历源目录下所有文件;
  2. 根据文件扩展名判断是否为文本文件;
  3. 对文本文件:
    • chardet 检测原始编码;
    • 解码后以 UTF-8 重新写入目标目录;
  4. 对非文本文件(如图片):
    • 直接二进制复制,不做任何修改;
  5. 使用相对路径保持目录结构一致。

三、完整可运行代码

将以下代码保存为 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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python开源库 Streamlit 应用案例

    Python开源库 Streamlit 应用案例

    Streamlit是一个开源Python框架,专为数据科学家和工程师设计,可快速构建交互式Web应用,无需前端开发知识,支持数据可视化、模型集成、文件上传及多种部署方式,简化了数据驱动项目开发流程,本文给大家介绍Python开源库Streamlit应用案例,感兴趣的朋友一起看看吧
    2025-09-09
  • python Tkinter Frame 深度解析与实战避坑指南

    python Tkinter Frame 深度解析与实战避坑指南

    Frame是Tkinter中最重要的容器组件,用于组织与分层界面,它支持多种布局管理器,本文给大家介绍python Tkinter Frame 深度解析与实战指南,感兴趣的朋友跟随小编一起看看吧
    2026-02-02
  • python实现单线程多任务非阻塞TCP服务端

    python实现单线程多任务非阻塞TCP服务端

    这篇文章主要为大家详细介绍了python实现单线程多任务非阻塞TCP服务端的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • Django-silk性能测试工具安装及使用解析

    Django-silk性能测试工具安装及使用解析

    这篇文章主要介绍了Django-silk性能测试工具安装及使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Python图像的增强处理操作示例【基于ImageEnhance类】

    Python图像的增强处理操作示例【基于ImageEnhance类】

    这篇文章主要介绍了Python图像的增强处理操作,结合实例形式分析了使用ImageEnhance类处理图片的亮度、对比度、色度以及锐度等相关操作技巧,需要的朋友可以参考下
    2019-01-01
  • Numpy将二维数组添加到空数组的实现

    Numpy将二维数组添加到空数组的实现

    今天小编就为大家分享一篇Numpy将二维数组添加到空数组的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • Python报错TypeError: tuple indices must be integers or slices, not str的问题分析及解决方法

    Python报错TypeError: tuple indices must be

    在Python编程过程中,我们经常会遇到各种各样的报错信息,其中,“TypeError: tuple indices must be integers or slices, not str”这个报错,对于很多开发者来说,可能既熟悉又陌生,今天,我们就来深入探讨一下这个报错,看看它是如何产生的,以及如何快速有效地解决它
    2025-01-01
  • 18个帮你简化代码的Python技巧分享

    18个帮你简化代码的Python技巧分享

    选择学习 python 时,最令我震惊的是它的简单性和可读性。但是你知道还可以用更少的代码行可以让 Python 代码变得更简单吗?本文为大家总结了18个帮你简化代码的Python技巧,感兴趣的可以了解一下
    2022-07-07
  • pd.DataFrame中的几种索引变换的实现

    pd.DataFrame中的几种索引变换的实现

    本文主要介绍了pd.DataFrame中的几种索引变换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • python禁用键鼠与提权代码实例

    python禁用键鼠与提权代码实例

    这篇文章主要介绍了python禁用键鼠与提权代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08

最新评论