记Django+小程序实现文本内容安全检测的一坑(编码问题)

在小程序中实现文本内容安全检测,也就是违法违规内容的鉴别,必须使用小程序提供的security.msgSecCheck接口,后端用的Django,所有采用服务端接口调用方式。
Python3使用requests模块,requests.post(url, data)发送post请求。
1.开头小坑注意下就行了,access_token要放在url里面
2.坑得最久的就是,传任何内容鉴别都是通过的,返回ok。
首先拼接data:
data要转化为json格式,但是注意下要设置ensure_ascii=False,不要让它转为ascli编码

conten = "特3456书yuuo莞6543李zxcz蒜7782法fgnv级 完2347全dfji试3726测asad感3847知qwez到"
data = {'content': content}
data = json.dumps(data,ensure_ascii=False)   //转化为json格式,json转化后会自动转为ascli编码,所以设置不转为ascli
url = "https://api.weixin.qq.com/wxa/msg_sec_check?access_token=XXXXXXX"    //自己的access_token
req = requests.post(url=url, data=data)
print(req.json().get("errcode"))  // 87014表示违法违规   0表示通过正常

这样调接口发现英文的违规能鉴别出来,比如xi/d/a/d/a,但是中文官方给的样例都是返回ok通过了。
使用中文官方给的测试样例:
"特3456书yuuo莞6543李zxcz蒜7782法fgnv级 完2347全dfji试3726测asad感3847知qwez到"
我们知道坑定不会通过,但是报错了:

'latin-1' codec can't encode character '\u7279' in position 15: Body ('特') is not valid Latin-1. 
Use body.encode('utf-8') if you want to send it encoded in UTF-8.

根据提示知道,不能直接把latin-1转化为\u7279,意思就是“latin-1”编解码器无法对这个中文进行编码,所以我们需要先把字符串先转化为utf-8在解码成latin-1。

data = {'content': content.encode("utf-8").decode("latin-1")}

最后测试就成功了,中文也能鉴别

你可能感兴趣的:(记Django+小程序实现文本内容安全检测的一坑(编码问题))