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

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

作者: 楠木cral | 来源:发表于2020-12-03 17:53 被阅读0次

    在小程序中实现文本内容安全检测,也就是违法违规内容的鉴别,必须使用小程序提供的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+小程序实现文本内容安全检测的一坑(编码问题)

          本文链接:https://www.haomeiwen.com/subject/fftvwktx.html