首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Python 讀取中文路徑亂碼解決方案:正確處理檔案系統編碼

     編輯:程式設計綜合問答

問題現象

Windows 下使用 os.listdir()、os.path.abspath() 讀取中文目錄時,路徑出現亂碼(如 һɳ),導致 open() 失敗。

根本原因

Python 3 預設使用 UTF-8,但 Windows 檔案系統 API 回傳的是系統預設編碼(通常為 GBK/CP936)。若直接將位元組串解碼為 UTF-8 即產生亂碼。

解決方案

  1. 使用 pathlib(推薦):Path 物件自動處理編碼轉換。
    from pathlib import Path
    for p in Path(input_dir).iterdir():
        print(p)  # 正確顯示中文
    
  2. 顯式指定編碼:在 os.listdir() 後以 sys.getfilesystemencoding() 解碼。
    
    import os, sys
    fs_enc = sys.getfilesystemencoding()  # 'mbcs' 或 'gbk'
    names = os.listdir(input_dir)
    for n in names:
        true_name = n.encode(fs_enc).decode('utf-8')  # 若需統一為 utf-8
    
  3. 避免 sys.setdefaultencoding:此函數在 Python 3 已移除,強行修改會破壞內部一致性。

最佳實踐

全程使用 pathlib.Path 或 os.scandir()(回傳 DirEntry 含正確字串),並在開啟檔案時直接傳入 Path 物件,讓底層處理編碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved