问题
使用Qt发送一个Http post请求的时候,服务一直返回错误和失败信息。同样的url以及post参数,复制黏贴到postman里就可以发送成功。就感觉很神奇。
原因
最后排查出原因是因为参数中含有汉字而导致的编码问题。
在拼接post参数时,使用了toLocal8Bit()来将QString转为QByteArray。而toLocal8Bit(),会将QString对象转换为本地8位字符集编码的QByteArray对象。根据不同平台,可能转换的编码方式不同,在中文Windows系统中,toLocal8Bit()会将QString对象转换为GB2312编码的QByteArray对象。因为服务部署在Linux环境下,所以应该是这里导致的问题。
解决
改为使用QJsonDocument组织json字符串,调用它的toJson()接口,直接转换成QByteArray,默认是Utf-8编码的。
或者另一种方式是,直接将拼接的字符串,调用toUtf8()接口,应该也是可以的。