使用Python腳本批量轉(zhuǎn)換網(wǎng)頁文件編碼為UTF-8
一、背景與痛點
當我們使用瀏覽器的“另存為”功能保存網(wǎng)頁時,經(jīng)常會遇到以下問題:
- 保存下來的 HTML、CSS、JS 文件使用的是本地編碼(如
GBK或GB2312); - 在現(xiàn)代開發(fā)環(huán)境或服務(wù)器中,UTF-8 是標準編碼;
- 直接使用這些文件會導(dǎo)致 中文亂碼,影響閱讀或部署;
- 手動逐個轉(zhuǎn)換效率極低,尤其當網(wǎng)頁包含大量資源文件(圖片、腳本、樣式表)時。
為此,我編寫了一個 自動化腳本,可一鍵完成:
? 自動檢測原始編碼
? 將文本文件轉(zhuǎn)為 UTF-8
? 二進制文件(如圖片)原樣復(fù)制
? 完整保留源目錄結(jié)構(gòu)
二、核心思路
- 遍歷源目錄下所有文件;
- 根據(jù)文件擴展名判斷是否為文本文件;
- 對文本文件:
- 用
chardet檢測原始編碼; - 解碼后以 UTF-8 重新寫入目標目錄;
- 用
- 對非文本文件(如圖片):
- 直接二進制復(fù)制,不做任何修改;
- 使用相對路徑保持目錄結(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)用案例
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)避坑指南
Frame是Tkinter中最重要的容器組件,用于組織與分層界面,它支持多種布局管理器,本文給大家介紹python Tkinter Frame 深度解析與實戰(zhàn)指南,感興趣的朋友跟隨小編一起看看吧2026-02-02
python實現(xiàn)單線程多任務(wù)非阻塞TCP服務(wù)端
這篇文章主要為大家詳細介紹了python實現(xiàn)單線程多任務(wù)非阻塞TCP服務(wù)端的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06
Python圖像的增強處理操作示例【基于ImageEnhance類】
這篇文章主要介紹了Python圖像的增強處理操作,結(jié)合實例形式分析了使用ImageEnhance類處理圖片的亮度、對比度、色度以及銳度等相關(guān)操作技巧,需要的朋友可以參考下2019-01-01
Numpy將二維數(shù)組添加到空數(shù)組的實現(xiàn)
今天小編就為大家分享一篇Numpy將二維數(shù)組添加到空數(shù)組的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12
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

