1. 程式人生 > >python關於windows建立含有中文字串的資料夾及檔案時亂碼的問題處理

python關於windows建立含有中文字串的資料夾及檔案時亂碼的問題處理

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

把該字串編碼轉換為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)