Python Github API不接受JSON格式的Unicode字符
当我读取Unicode字符文件并尝试通过API为发生的异常创建Github问题时,会发生异常:Python Github API不接受JSON格式的Unicode字符,python,python-2.7,unicode,github-api,Python,Python 2.7,Unicode,Github Api,当我读取Unicode字符文件并尝试通过API为发生的异常创建Github问题时,会发生异常: Traceback (most recent call last): File "./item.py", line 320, in <module> auto_issue(opt.hashToCrack, e, e.message) File "/home/baal/bin/python/settings.py", line 480, in auto_issue _
Traceback (most recent call last):
File "./item.py", line 320, in <module>
auto_issue(opt.hashToCrack, e, e.message)
File "/home/baal/bin/python/settings.py", line 480, in auto_issue
_failure(issue, hashed_string, error)
File "/home/baal/bin/python/github/create_issue.py", line 109, in _failure
urllib2.urlopen(req).read()
File "/usr/lib/python2.7/urllib2.py", line 154, in urlopen
return opener.open(url, data, timeout)
File "/usr/lib/python2.7/urllib2.py", line 435, in open
response = meth(req, response)
File "/usr/lib/python2.7/urllib2.py", line 548, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/lib/python2.7/urllib2.py", line 473, in error
return self._call_chain(*args)
File "/usr/lib/python2.7/urllib2.py", line 407, in _call_chain
result = func(*args)
File "/usr/lib/python2.7/urllib2.py", line 556, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 422: Unprocessable Entity
回溯(最近一次呼叫最后一次):
文件“/item.py”,第320行,在
自动发布(opt.hashToCrack,e,e.message)
文件“/home/baal/bin/python/settings.py”,第480行,自动发布
_失败(问题、哈希字符串、错误)
文件“/home/baal/bin/python/github/create_issue.py”,第109行,输入失败
urlib2.urlopen(req.read)()
文件“/usr/lib/python2.7/urllib2.py”,第154行,在urlopen中
返回opener.open(url、数据、超时)
文件“/usr/lib/python2.7/urllib2.py”,第435行,打开
响应=方法(请求,响应)
http_响应中的文件“/usr/lib/python2.7/urllib2.py”,第548行
“http”、请求、响应、代码、消息、hdrs)
文件“/usr/lib/python2.7/urllib2.py”,第473行出错
返回自我。调用链(*args)
文件“/usr/lib/python2.7/urllib2.py”,第407行,在调用链中
结果=func(*args)
文件“/usr/lib/python2.7/urllib2.py”,第556行,默认为http\u error\u
raise HTTPError(请求获取完整url(),代码,消息,hdrs,fp)
urllib2.HTTPError:HTTP错误422:不可处理的实体
我做了一些研究,得出结论,当异常信息中有Unicode字符时,就会发生这种情况。我如何创建Github问题如下:
def _failure(issue, hashed_string, error):
def __create_issue_ext():
retval = []
for _ in range(5):
retval.append(random.choice(string.ascii_letters))
return ''.join(retval)
issue_title = "Unhandled Exception {}({})".format(issue, __create_issue_ext())
issue_data = {
"title": issue_title,
"body": open("{}/lib/github/issue_template".format(os.getcwd())).read().format(
type(error).__name__, (error.args, error.message), platform.platform(),
hashed_string, sys.argv
)
}
req = urllib2.Request(
url="https://api.github.com/repos/<name>/<project>/issues", data=json.dumps(issue_data),
headers={"Authorization": "token {}".format(__handle(__get_encoded_string()))})
urllib2.urlopen(req).read()
lib.settings.LOGGER.info(
"Your issue has been created with the title '{}'.".format(
issue_title
)
)
def_失败(问题、哈希字符串、错误):
定义创建问题扩展()
retval=[]
对于范围(5)内的uu:
retval.append(random.choice(string.ascii_字母))
返回“”。加入(retval)
issue\u title=“未处理的异常{}({})”。格式(issue,\uuuu create\uissue\uext())
问题_数据={
“标题”:问题标题,
“body”:打开(“{}/lib/github/issue_template”。format(os.getcwd())。read()。format(
键入(错误)。\uuuuuuuuuuuuuuuuu名称(error.args,error.message),platform.platform(),
哈希_字符串,sys.argv
)
}
req=urllib2.请求(
url=”https://api.github.com/repos///issues,data=json.dumps(发布数据),
headers={“Authorization”:“token{}.format(uuu handle(uu get_encoded_string()))})
urlib2.urlopen(req.read)()
lib.settings.LOGGER.info(
“已创建标题为“{}”的问题。格式。”(
发行名称
)
)
现在,只要异常字符串中没有Unicode字符,就可以了。所以我的问题是,有没有一种方法可以让Unicode转换成JSON格式,或者在将Unicode字符的异常字符串添加到JSON格式之前去掉它?是否可以在python 3+上运行脚本?处理unicode的大多数问题在python 3中都得到了解决。@Poonacha Nope only 2.7.x根据您应该
urllib.urlencode
您的数据。是否可以在python 3+上运行您的脚本?处理unicode的大多数问题在python 3中都得到了解决。@Poonacha Nope only 2.7.x根据您应该urllib.urlencode
您的数据。