使用 Web api 的 update_status 可以修改问题的状态并填写批注:
但是,如果写入的是中文的批注,如果不注意,会产生乱码:
原因是在提交 web api 请求的时候,没有处理好编码的问题。
Klocwork Database 使用 utf-8 编码存储数据,因此,最方便的解决方法是统一使用 utf-8 编码来编写脚本、命令、和提交请求。我们分别看 curl 和 python脚本的情况。
【curl 的情况】
使用 curl 命令访问 web api 是轻量级的访问方式,方法简单易行,适合简单场景和程序调试。使用的 curl 命令中的 http 请求里面如果有多字节编码,需要指定多字节的编码格式,然后系统会自动将指定的编码格式转换成 utf-8。比如:在windows 下,缺省的命令行窗口字符集是 GBK,那么需要通过设置 http 请求的 header 来指定字符集编码:
curl --data "action=update_status&user=haojc&project=afd&ids=48&status=Fix&comment=立即修复&owner=haojc" -H "Content-Type: application/x-www-form-urlencoded;charset=GBK" http://haojcpc:8090/review/api
这样,就可以将 “立即修复” 从GBK 转换为 UTF-8,存入的注解就不会是乱码。
【python 的情况】
使用 python 访问 web api 适合具有复杂处理的情况,利用 python 脚本的灵活性来获得丰富的功能。
同样的道理,如果处理不当,python 的 web api 访问也会出现乱码。要解决 python web api 处理的乱码问题,需要注意三个方面:
(1)python 脚本的文件本身的编码采用 utf-8 编码:
比如,用 Notepad++,设置:
(2)python 脚本文件里面设置编码格式指令:
在 python 脚本文件开头,指定 # -*- coding: utf8 -*-
然后,在使用多字节字符的地方,使用 setdefaultencoding 指定要采用的多字节编码,并在输入多字节编码的时候,使用 u' 进行 utf-8 编码。
reload(sys)
sys.setdefaultencoding('utf8')
values["ids"] = "48"
values["status"] = "Fix"
values["comment"]= u'请尽快修复此缺陷' ## 用 u'指定为 utf-8 编码
print(values["comment"])
data = urllib.urlencode(values)
req = urllib2.Request(url, data)
更重要的是,一定要在 http 请求上,设置Content-type为: 'application/x-www-form-urlencoded;charset=UTF-8'
req.add_header('Content-Type', 'application/x-www-form-urlencoded;charset=UTF-8')
整体看起来是这样:
这样,就能得到没有乱码的中文写入了:
领取专属 10元无门槛券
私享最新 技术干货