在Windows上使用bat調用python腳本時出現報錯、亂碼
在經過一番調試,解決了cmd命令行運行python時的亂碼現象,但是通過bat調用python腳本時亂碼又出現了。最好的解決辦法是python腳本輸出的結果都轉為字符串,并且是gbk編碼。(python版本為2.6)
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
rm -rf cd /opt/
浙公網安備 33010602011771號