python建立檔名亂碼怎麼解決

jerrysun發表於2021-09-11

python建立檔名亂碼怎麼解決

資料夾和檔案的名字裡面含有中文字串時出現亂碼的處理:

把該字串編碼轉換為unicode或gbk編碼的字串來解決。程式碼第二行如有宣告編碼格式如utf-8,則程式碼裡面出現中文字串的地方就按照utf-8格式的字串去處理;如沒有編碼宣告,則windows系統預設為gbk編碼,而linux預設為utf-8編碼。

#!/usr/bin/env python
# coding:utf-8
import os
# 對變數s的值字串 '中國' 按utf-8編碼處理
s = '中國'
# 建立的資料夾為亂碼,亂碼原因:程式碼編碼為utf-8的中文字串,但windows系統預設使用gbk編碼,所以會亂碼,
只有它們一致才不亂碼
# os.mkdir(s)
# 下面2種方法都能建立含有中文字串的資料夾及檔案
# 把s的值進行解碼,由於其為utf-8編碼,所以使用utf-8解碼
# os.mkdir(s.decode('utf-8'))
# windows系統的資料夾和檔案的名字需要為unicode或gbk編碼的字串,才可以正常顯示不亂碼。
# os.mkdir(s.decode('utf-8').encode('gbk'))
# f = open(s.decode('utf-8') + '.txt','w')
f = open(s.decode('utf-8').encode('gbk') + '.txt','w')
f.close()

此外,還發現一個現象,是否在使用unittest模組時,建立含有中文名字的資料夾時,是有區別的。

沒有使用unittest模組時,可以直接建立含有中文的資料夾,也沒出現亂碼。程式碼如下:

#!/usr/bin/env python
# coding:utf-8
import os
import chardet
s = raw_input('請輸入要建立的資料夾名字:')
# s的值為ascii字串,即gbk字串
print chardet.detect(s)
# 發現不在unittest模組裡面,可以不用編碼解碼處理,直接進行建立含有中文字串的資料夾,結果也沒發現亂碼。而
且檔案程式碼宣告為utf-8,也沒有進行轉碼,真是不可思議。
os.mkdir(s)
os.chdir(s)

python學習網,免費的線上學習,歡迎關注!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/151/viewspace-2835072/,如需轉載,請註明出處,否則將追究法律責任。

相關文章