我使用命令行.exe要运行我的脚本,它有一个错误:UnicodeDecodeError:'utf8'codec无法解码位置77中的字节0xc9:无效的继续符

2024-10-17 08:27:39 发布

您现在位置:Python中文网/ 问答频道 /正文

#-*- coding:utf-8 -*-

import sys
sys.path.append('C:\\Users\\Karl\\workspace\\ApiRutomatedTest')
from common.SQLServerRequest import SQLServerRequest
sqlRequest = SQLServerRequest()

def getFirmCreator(env, firm_name):
   '''
   @功能:获取公司创建人名字
   '''
   sqlRequest.GetSQLSev(env)
   rows = sqlRequest.QuerySQLSev('SELECT b.Mobile from Firms a, Users b where a.CreatorId = b.Id and a.Name = \'%s\'' % firm_name)
   print rows

# getFirmCreator('LBD_SQL_SERVER', '深圳IBM')

if len(sys.argv) != 3:
   print "python GetFirmCreator.py dev/master firm_name"
elif sys.argv[1] == 'dev':
   getFirmCreator('LBD_SQL_SERVER', sys.argv[2])
elif sys.argv[1] == 'master':
   getFirmCreator('LBD_MASTER_SQL_SERVER', sys.argv[2])

这是我的代码,当我使用eclipse运行它时:

^{pr2}$

没有错误,它可以告诉我正确的结果,结果是:

[(u'18302050001',)]

但是当我使用命令行.exe运行它,像这样:

C:\Users\Karl\workspace\ApiRutomatedTest\script>python GetFirmCreator.py dev 深圳IBM

是错误:

Traceback (most recent call last):
File "GetFirmCreator.py", line 28, in <module>
getFirmCreator('LBD_SQL_SERVER', sys.argv[2])
File "GetFirmCreator.py", line 20, in getFirmCreator
rows = sqlRequest.QuerySQLSev('SELECT b.Mobile from Firms a, Users b where    a.CreatorId = b.Id and a.Name = \'%s\'' % firm_name)
File "C:\Users\Karl\workspace\ApiRutomatedTest\common\SQLServerRequest.py", line 49, in QuerySQLSev
cur.execute(query_str)
File "pymssql.pyx", line 445, in pymssql.Cursor.execute (pymssql.c:6810)
File "_mssql.pyx", line 998, in _mssql.MSSQLConnection.execute_query (_mssql.c:10765)
 File "_mssql.pyx", line 1029, in _mssql.MSSQLConnection.execute_query (_mssql.c:10639)
 File "_mssql.pyx", line 1149, in_mssql.MSSQLConnection.format_and_run_query (_mssql.c:11786)
 File "_mssql.pyx", line 200, in _mssql.ensure_bytes (_mssql.c:2582)
 File "C:\Python27\lib\encodings\utf_8.py", line 16, in decode
 return codecs.utf_8_decode(input, errors, True)
 UnicodeDecodeError: 'utf8' codec can't decode byte 0xc9 in position   77:   invalid continuation byte

Tags: nameinpysyslineusersfilepyx
1条回答
网友
1楼 · 发布于 2024-10-17 08:27:39

您的命令行参数使用当前的终端编码进行编码,您可以通过chcp-命令获得该编码。在

必须首先对参数进行解码:

import locale
import sys
current_encoding = locale.getpreferredencoding() or 'utf8'

if len(sys.argv) != 3:
    print "python GetFirmCreator.py dev/master firm_name"
    sys.exit(1)
env = sys.argv[1]
firm_name = sys.argv[2].decode(current_encoding)
env = {
    'dev': 'LBD_SQL_SERVER',
    'master': 'LBD_MASTER_SQL_SERVER',
}[env]
getFirmCreator(env, firm_name)

相关问题 更多 >