解決問題:
1、在系統默認編碼爲ASCII的系統中,保存中文到文件是亂碼:“UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe7 in position 7: ordinal not in range(128)"
2、在window和linux文件路徑分隔符不相同,同一個腳本在不同系統找不到對應路徑/文件
編碼格式問題處理:
import sys
# 如果系統默認編碼爲ascii,則設置編碼格式爲utf8
if sys.getdefaultencoding() == 'ascii':
reload(sys)
# 因爲解釋器啓動時默認編碼爲ascii,只有重新加載sys後,再設置編碼格式纔會生效
sys.setdefaultencoding('utf8')
系統路徑分隔符
import re
import os
def SepChange(Path):
'''
路徑分隔符替換
:param Path: 路徑
:return: 替換過系統分隔符的路徑
'''
if re.search('/',path):
path = Path.replace('/',os.sep)
elif re.search(r'\\',path):
path = Path.replace(r'\\',os.sep)
else:
pass
return path
完整的SysEncoding.py文件內容:
# coding:utf-8
'''
Note:
更換路徑間隔符
更換編碼格式爲'utf-8'
Author:Qred
Date:2019/8/20
'''
import re
import os
import sys
if sys.getdefaultencoding() == 'ascii':
reload(sys)
sys.setdefaultencoding('utf8')
def SepChange(Path):
'''
路徑分隔符替換
:param Path: 路徑
:return: 替換過系統分隔符的路徑
'''
if re.search('/',path):
path = Path.replace('/',os.sep)
elif re.search('\\',path):
path = Path.replace('\\',os.sep)
else:
pass
return path
在需要進行編碼格式的腳本頭部引入該文件,即可實現ascii轉utf8的變換。
如果腳本中涉及不通操作系統的文件路徑轉換,可以調用SepChange實現文件路徑的快速轉換。