python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python网页文件编码转UTF-8

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

作者:weixin_46244623

文章介绍了一个自动化脚本,用于将通过浏览器另存为功能保存的网页文件从GBK转换为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

准备数据

运行脚本

python convert_webpage_to_utf8.py

查看结果

五、注意事项

六、结语

这个脚本已在多个实际项目中验证,能高效解决“另存网页中文乱码”这一常见痛点。代码简洁、健壮、易修改,适合集成到自动化流程中。

到此这篇关于使用Python脚本批量转换网页文件编码为UTF-8的文章就介绍到这了,更多相关Python网页文件编码转UTF-8内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文