1. 程式人生 > 其它 >Window cmd執行Python指令碼出現亂碼

Window cmd執行Python指令碼出現亂碼

在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