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

Written by

in

文章目录
  • 当我们使用浏览器的“另存为”功能保存网页时,经常会遇到以下问题: 保存下来的 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内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: Python实现CSV文件编码转换工具(转成UTF-8格式) 用Python把csv文件批量修改编码为UTF-8格式并转为Excel格式的方法 Python批量将csv文件编码方式转换为UTF-8的实战记录 使用python批量转换文件编码为UTF-8的实现 Python3编码问题 Unicode utf-8 bytes互转方法
  • 目录
    • 一、背景与痛点
    • 二、核心思路
    • 三、完整可运行代码
    • 四、使用方法
    • 五、注意事项
    • 六、结语

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

    • 保存下来的 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实现CSV文件编码转换工具(转成UTF-8格式)
    • 用Python把csv文件批量修改编码为UTF-8格式并转为Excel格式的方法
    • Python批量将csv文件编码方式转换为UTF-8的实战记录
    • 使用python批量转换文件编码为UTF-8的实现
    • Python3编码问题 Unicode utf-8 bytes互转方法

    站内搜索