在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

 

posted on 2021-07-01 17:31  阳光的日子  阅读(633)  评论(0编辑  收藏  举报