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

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

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

一、背景與痛點

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

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

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

二、核心思路

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

三、完整可運行代碼

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

import os
import chardet
import shutil

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

# 被視為“文本文件”的擴展名(會進行編碼轉(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()

    # 自動檢測編碼,失敗時 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ù)制二進制文件"""
    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)      # 構(gòu)建目標路徑

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

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

四、使用方法

安裝依賴(首次運行需要):

pip install chardet

準備數(shù)據(jù)

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

運行腳本

python convert_webpage_to_utf8.py

查看結(jié)果

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

五、注意事項

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

六、結(jié)語

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

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

相關(guān)文章

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

    Python開源庫?Streamlit?應(yīng)用案例

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

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

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

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

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

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

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

    Python圖像的增強處理操作示例【基于ImageEnhance類】

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

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

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

    Python報錯TypeError: tuple indices must be

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

    18個幫你簡化代碼的Python技巧分享

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

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

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

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

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

最新評論

秦安县| 银川市| 顺义区| 海安县| 丰县| 武威市| 奎屯市| 惠水县| 朔州市| 景泰县| 辽阳市| 古浪县| 融水| 绿春县| 卓尼县| 天水市| 高州市| 肥城市| 茌平县| 浦东新区| 含山县| 沿河| 江川县| 湖北省| 宁武县| 洪雅县| 福清市| 澎湖县| 荣成市| 报价| 临沧市| 嵊泗县| 西盟| 南京市| 湖南省| 亚东县| 偃师市| 镇巴县| 定兴县| 宝应县| 南安市|