由于密码中含有敏感字符,导致前端页面异常,图标变灰,坐标拾取打不开图像等,主要原因是:密码比较前后不一致,左边是Abc_110+,右边是:Abc_110%2B,对于此问题,特别编写了url编码函数,利用Qt的编码方法对所有敏感字符进行统一处理,然后再进行比较,就OK了,注意opencv的rtsp格式符中不能包含敏感字符,但是SDK登录时,还要使用原始密码,所以密码输入时,要按原始密码输入,使用过程中,需要编码的地方用编码。
//检查是否为重复编码
bool isAlreadyEncoded(const QString &str) {// 检查字符串中是否存在 % 后跟两位十六进制数字的模式QRegularExpression regex("%[0-9A-Fa-f]{2}");return regex.match(str).hasMatch();
}
//检查密码中是否含有敏感字符,如果有则进行url编码,如:@转换为%40,+号转换为%2B等
QString safeEncode(const QString &input) {if (isAlreadyEncoded(input)) {// 如果已经编码,直接返回原始字符串return input;} else {// 如果未编码,进行编码return QString::fromUtf8(input.toUtf8().toPercentEncoding());}
}//检测摄像头参数是否改变
bool DataObj_Camera::checkCamParams(){if(id<1 || id>8) return false;if(cameraparam.getIp()!=gCarDetectorParams.getCameraIP(id)||cameraparam.getUsername()!=gCarDetectorParams.getCameraUsername(id) ||safeEncode(cameraparam.getPassword())!=safeEncode(gCarDetectorParams.getCameraPassword(id)) ||cameraparam.getPort()!=gCarDetectorParams.getCameraPort(id) ||cameraparam.getType()!=gCarDetectorParams.getCameraType(id) ||cameraparam.getCodec()!=gCarDetectorParams.getCameraCodec(id) ||cameraparam.getInputMode()!=gCarDetectorParams.getCameraInputMode(id)||cameraparam.getInputChannel()!=gCarDetectorParams.getCameraInputChannel(id)){return false;}return true;
}