Window cmd執行Python指令碼出現亂碼
阿新 • • 發佈:2021-07-01
在Windows上使用bat呼叫python指令碼時出現報錯、亂碼
Python指令碼內容是將excel轉為csv
xlsx_to_csv.py
# -*- coding: gbk -*- import codecs import json import xlrd import datetime import csv import sys reload(sys) sys.setdefaultencoding('gbk') print sys.getdefaultencoding() def xlsx_to_csv(): filename='E:\workspaces\test測試.xlsx' workbook = xlrd.open_workbook(filename)
# with codecs.open('fcc.csv', 'w', encoding='utf-8') as f: # write = csv.writer(f) # for row_num in range(table.nrows): # row_value = table.row_values(row_num) # write.writerow(row_value) sheet_names=workbook.sheet_names()for i in range(len(sheet_names)): table = workbook.sheet_by_index(i) for row_num in range(0,table.nrows): row_value = table.row_values(row_num) # print row_value print sheet_names[i],",",json.dumps(row_value, ensure_ascii=False, encoding='utf-8')# print str(row_value).encode('GB2312') .decode('unicode_escape') if __name__ == '__main__': xlsx_to_csv()
三處編碼相關設定:
1、指定檔案編碼
# -*- coding: gbk -*-
2、更改系統預設編碼
sys.setdefaultencoding('gbk')
3、json.dumps 序列化時對中文預設使用的ascii編碼,print json.dumps(row_value
)
輸出unicode編碼的結果
print json.dumps(row_value,ensure_ascii=False)
不使用ascii編碼,而以gbk編碼 。
以下encoding指定為”utf-8"/"gbk"都可以。
json.dumps(row_value, ensure_ascii=False, encoding='utf-8')
不同配置下:
亂碼: ["鐗矽壊", "瀛楁1", "瀛楁2", "瀛楁3", "瀛楁4", "瀛楁5", "瀛楁6"]
亂碼:["\u7279\u8272", "\u5b57\u6bb51", "\u5b57\u6bb52", "\u5b57\u6bb53", "\u5b57\u6bb54", "\u5b57\u6bb55"]
報錯:UnicodeEncodeError: 'ascii' codec can't encode characters in position 25-32: ordinal not in range(128)
xlsx_to_csv.bat
@echo off for /f "delims=" %%i in ('D:\python\Python27\python.exe "E:\workspaces\xlsx_to_csv.py"') do echo %%i