Python 3.X 亂碼解決(一文搞定Python3.x 亂碼問題)


Python 升級到3.0之后,已經很少會有亂碼的情形,尤其在源碼中注解:

# -*- coding: utf-8 -*-

但是如果我們讀入的內容本來就是亂碼的該如何是好?

舉例:

  • 從操作系統讀取文件清單。在文件夾中查看,該文件名本來就是亂碼。 (已知這個文件是繁體BIG5編碼,所以在簡體系統中顯示是亂碼)

  • 以下是讀取文件名的代碼:
# coding: Utf-8
import os

files = os.listdir('c:\\temp')
print(files[9:10])  # 僅顯示亂碼的文件名
str1 = files[9]
print(str1.encode('utf-8'))

  注意“”這個,對應的UTF-8的編碼是\xe7\x95\x97,轉換為unicode之后:\u7557

  • 通過下面網站查看對應的字符編碼

https://www.qqxiuzi.cn/bianma/zifuji.php 

  •   繼續在網站中查 AE7D對應的BIG5

  •   可以理解如下:

徐  -(Big5 編碼)-> AE7D -(GBK 解碼)-> 畗 -(UTF-8/Unicode 編碼)-> \xe7\x95\x97/\u7557(畗)

所以出現問題的環節還是在紅字加粗的部分。

  • 修復亂碼
# coding: Utf-8
import os

files = os.listdir('c:\\temp')
print(files[9:10])  # 僅顯示亂碼的文件 
str1 = files[9]
print(str1.encode('utf-8'))
print(str1.encode('GBK').decode('Big5'))

  •   整個流程解釋如下:

徐  -(Big5 編碼)-> AE7D -(GBK 解碼)-> 畗 -(UTF-8/Unicode 編碼)-> \xe7\x95\x97/\u7557 -(UTF-8/Unicode 解碼)-> 畗 -(GBK 編碼)->  AE7D  -(Big5 解碼)->  徐

紅色字部分:之前在操作系統層面操作導致出問題

橙色字部分:Python3讀取系統文件清單時候的默認操作

綠色字部分:Python3內部默認操作

黑色粗體部分:亂碼矯正

 

附參考文檔:

https://www.qqxiuzi.cn/bianma/zifuji.php 

https://tool.oschina.net/hexconvert/

https://zhuanlan.zhihu.com/p/26261762

http://cenalulu.github.io/linux/character-encoding/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM