由于密碼中含有敏感字符,導致前端頁面異常,圖標變灰,坐標拾取打不開圖像等,主要原因是:密碼比較前后不一致,左邊是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;
}