最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Python腳本批量轉(zhuǎn)換網(wǎng)頁(yè)文件編碼為UTF-8

 更新時(shí)間:2026年01月23日 08:24:20   作者:weixin_46244623  
文章介紹了一個(gè)自動(dòng)化腳本,用于將通過(guò)瀏覽器另存為功能保存的網(wǎng)頁(yè)文件從GBK轉(zhuǎn)換為UTF-8編碼,以解決中文亂碼問(wèn)題,并保持源目錄結(jié)構(gòu),該腳本支持文本和二進(jìn)制文件的處理,易于使用和擴(kuò)展,需要的朋友可以參考下

一、背景與痛點(diǎn)

當(dāng)我們使用瀏覽器的“另存為”功能保存網(wǎng)頁(yè)時(shí),經(jīng)常會(huì)遇到以下問(wèn)題:

  • 保存下來(lái)的 HTML、CSS、JS 文件使用的是本地編碼(如 GBKGB2312);
  • 在現(xiàn)代開(kāi)發(fā)環(huán)境或服務(wù)器中,UTF-8 是標(biāo)準(zhǔn)編碼;
  • 直接使用這些文件會(huì)導(dǎo)致 中文亂碼,影響閱讀或部署;
  • 手動(dòng)逐個(gè)轉(zhuǎn)換效率極低,尤其當(dāng)網(wǎng)頁(yè)包含大量資源文件(圖片、腳本、樣式表)時(shí)。

為此,我編寫(xiě)了一個(gè) 自動(dòng)化腳本,可一鍵完成:
? 自動(dòng)檢測(cè)原始編碼
? 將文本文件轉(zhuǎn)為 UTF-8
? 二進(jìn)制文件(如圖片)原樣復(fù)制
? 完整保留源目錄結(jié)構(gòu)

二、核心思路

  1. 遍歷源目錄下所有文件;
  2. 根據(jù)文件擴(kuò)展名判斷是否為文本文件;
  3. 對(duì)文本文件:
    • chardet 檢測(cè)原始編碼;
    • 解碼后以 UTF-8 重新寫(xiě)入目標(biāo)目錄;
  4. 對(duì)非文本文件(如圖片):
    • 直接二進(jìn)制復(fù)制,不做任何修改;
  5. 使用相對(duì)路徑保持目錄結(jié)構(gòu)一致。

三、完整可運(yùn)行代碼

將以下代碼保存為 convert_webpage_to_utf8.py,放在與你的網(wǎng)頁(yè)文件夾同級(jí)目錄下即可運(yùn)行:

import os
import chardet
import shutil

# ========== 配置區(qū) ==========
SRC_DIR = "另存的網(wǎng)頁(yè)"      # 源文件夾(請(qǐng)確保此目錄存在)
DST_DIR = "output_utf8"     # 輸出文件夾(腳本會(huì)自動(dòng)創(chuàng)建)

# 被視為“文本文件”的擴(kuò)展名(會(huì)進(jìn)行編碼轉(zhuǎn)換)
TEXT_EXTS = (
    ".html", ".htm", ".css", ".js", ".txt", ".json", ".xml", ".下載"
)

# ========== 工具函數(shù) ==========
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):
    """將文本文件轉(zhuǎn)為 UTF-8"""
    with open(src_path, "rb") as f:
        raw = f.read()

    # 自動(dòng)檢測(cè)編碼,失敗時(shí) 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):
    """直接復(fù)制二進(jìn)制文件"""
    try:
        ensure_dir_for_file(dst_path)
        shutil.copyfile(src_path, dst_path)
        print(f"?? 二進(jìn)制 {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}' 不存在,請(qǐng)檢查!")
        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)   # 獲取相對(duì)于源目錄的路徑
            dst = os.path.join(DST_DIR, rel)      # 構(gòu)建目標(biāo)路徑

            lower = name.lower()
            if lower.endswith(TEXT_EXTS):
                convert_text(src, dst)
            else:
                copy_binary(src, dst)  # 非文本文件一律原樣拷貝

    print(f"\n?? 處理完成!結(jié)果已保存至 '{DST_DIR}' 目錄。")

四、使用方法

安裝依賴(lài)(首次運(yùn)行需要):

pip install chardet

準(zhǔn)備數(shù)據(jù)

  • 將你從瀏覽器“另存為”的整個(gè)網(wǎng)頁(yè)文件夾重命名為 另存的網(wǎng)頁(yè)(或修改腳本中的 SRC_DIR);
  • 確保該文件夾與腳本在同一目錄下。

運(yùn)行腳本

python convert_webpage_to_utf8.py

查看結(jié)果

  • 所有文件將被復(fù)制到 output_utf8/
  • 文本文件已轉(zhuǎn)為 UTF-8 編碼,中文不再亂碼;
  • 圖片、圖標(biāo)等資源保持原樣。

五、注意事項(xiàng)

  • .下載 文件處理:某些瀏覽器(如 Chrome)會(huì)生成 .xxx.download 臨時(shí)文件,若其內(nèi)容是 HTML/JS,也應(yīng)轉(zhuǎn)碼;
  • 編碼識(shí)別容錯(cuò)chardet 對(duì)短文本可能不準(zhǔn),但對(duì)完整網(wǎng)頁(yè)通??煽浚籪allback 使用 gb18030 覆蓋絕大多數(shù)中文場(chǎng)景;
  • 安全策略:非文本文件一律不處理,避免損壞圖片、字體等二進(jìn)制資源;
  • 擴(kuò)展支持:如需處理 .md.csv 等,只需在 TEXT_EXTS 中添加對(duì)應(yīng)后綴。

六、結(jié)語(yǔ)

這個(gè)腳本已在多個(gè)實(shí)際項(xiàng)目中驗(yàn)證,能高效解決“另存網(wǎng)頁(yè)中文亂碼”這一常見(jiàn)痛點(diǎn)。代碼簡(jiǎn)潔、健壯、易修改,適合集成到自動(dòng)化流程中。

到此這篇關(guān)于使用Python腳本批量轉(zhuǎn)換網(wǎng)頁(yè)文件編碼為UTF-8的文章就介紹到這了,更多相關(guān)Python網(wǎng)頁(yè)文件編碼轉(zhuǎn)UTF-8內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python開(kāi)源庫(kù)?Streamlit?應(yīng)用案例

    Python開(kāi)源庫(kù)?Streamlit?應(yīng)用案例

    Streamlit是一個(gè)開(kāi)源Python框架,專(zhuān)為數(shù)據(jù)科學(xué)家和工程師設(shè)計(jì),可快速構(gòu)建交互式Web應(yīng)用,無(wú)需前端開(kāi)發(fā)知識(shí),支持?jǐn)?shù)據(jù)可視化、模型集成、文件上傳及多種部署方式,簡(jiǎn)化了數(shù)據(jù)驅(qū)動(dòng)項(xiàng)目開(kāi)發(fā)流程,本文給大家介紹Python開(kāi)源庫(kù)Streamlit應(yīng)用案例,感興趣的朋友一起看看吧
    2025-09-09
  • python Tkinter Frame 深度解析與實(shí)戰(zhàn)避坑指南

    python Tkinter Frame 深度解析與實(shí)戰(zhàn)避坑指南

    Frame是Tkinter中最重要的容器組件,用于組織與分層界面,它支持多種布局管理器,本文給大家介紹python Tkinter Frame 深度解析與實(shí)戰(zhàn)指南,感興趣的朋友跟隨小編一起看看吧
    2026-02-02
  • python實(shí)現(xiàn)單線程多任務(wù)非阻塞TCP服務(wù)端

    python實(shí)現(xiàn)單線程多任務(wù)非阻塞TCP服務(wù)端

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)單線程多任務(wù)非阻塞TCP服務(wù)端的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Django-silk性能測(cè)試工具安裝及使用解析

    Django-silk性能測(cè)試工具安裝及使用解析

    這篇文章主要介紹了Django-silk性能測(cè)試工具安裝及使用解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Python圖像的增強(qiáng)處理操作示例【基于ImageEnhance類(lèi)】

    Python圖像的增強(qiáng)處理操作示例【基于ImageEnhance類(lèi)】

    這篇文章主要介紹了Python圖像的增強(qiáng)處理操作,結(jié)合實(shí)例形式分析了使用ImageEnhance類(lèi)處理圖片的亮度、對(duì)比度、色度以及銳度等相關(guān)操作技巧,需要的朋友可以參考下
    2019-01-01
  • Numpy將二維數(shù)組添加到空數(shù)組的實(shí)現(xiàn)

    Numpy將二維數(shù)組添加到空數(shù)組的實(shí)現(xiàn)

    今天小編就為大家分享一篇Numpy將二維數(shù)組添加到空數(shù)組的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • Python報(bào)錯(cuò)TypeError: tuple indices must be integers or slices, not str的問(wèn)題分析及解決方法

    Python報(bào)錯(cuò)TypeError: tuple indices must be

    在Python編程過(guò)程中,我們經(jīng)常會(huì)遇到各種各樣的報(bào)錯(cuò)信息,其中,“TypeError: tuple indices must be integers or slices, not str”這個(gè)報(bào)錯(cuò),對(duì)于很多開(kāi)發(fā)者來(lái)說(shuō),可能既熟悉又陌生,今天,我們就來(lái)深入探討一下這個(gè)報(bào)錯(cuò),看看它是如何產(chǎn)生的,以及如何快速有效地解決它
    2025-01-01
  • 18個(gè)幫你簡(jiǎn)化代碼的Python技巧分享

    18個(gè)幫你簡(jiǎn)化代碼的Python技巧分享

    選擇學(xué)習(xí)?python?時(shí),最令我震驚的是它的簡(jiǎn)單性和可讀性。但是你知道還可以用更少的代碼行可以讓?Python?代碼變得更簡(jiǎn)單嗎?本文為大家總結(jié)了18個(gè)幫你簡(jiǎn)化代碼的Python技巧,感興趣的可以了解一下
    2022-07-07
  • pd.DataFrame中的幾種索引變換的實(shí)現(xiàn)

    pd.DataFrame中的幾種索引變換的實(shí)現(xiàn)

    本文主要介紹了pd.DataFrame中的幾種索引變換的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • python禁用鍵鼠與提權(quán)代碼實(shí)例

    python禁用鍵鼠與提權(quán)代碼實(shí)例

    這篇文章主要介紹了python禁用鍵鼠與提權(quán)代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08

最新評(píng)論

客服| 竹溪县| 资阳市| 财经| 卓资县| 阿拉善盟| 南宁市| 阳春市| 中山市| 新昌县| 淄博市| 来安县| 葵青区| 芒康县| 永顺县| 抚顺县| 尼玛县| 滨海县| 昆山市| 和田县| 庆云县| 巴里| 瑞丽市| 乡城县| 分宜县| 滦平县| 鹤山市| 繁峙县| 红安县| 涞水县| 顺昌县| 壤塘县| 皮山县| 张家港市| 宜宾县| 乳源| 霍邱县| 中山市| 荔波县| 双城市| 太康县|