替换为单个Blackslash在Qt中添加“

时间:2018-08-28 07:20:42

标签: c++ qt escaping

我正在尝试将Qt中的字符!替换为\,但是这样做会增加一个额外的",很难解决。

我有一个像这样的原始数据: "\"v=0\\r\\no=- 1534195387162130326 2 IN IP4 127.0.0.1\\r\\ns=-\\r\\nt=0 0\\r\\na=group:BUNDLE audio video\\r\\na=msid-semantic: WMS\\r\\nm=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 102 0 8 106 105 13 110 112 113 126...,我希望数据像这样:"v=0\r\no=- 6804998800185322649 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE audio video\r\na=msid-semantic: WMS\r\nm=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 102 0 8 106 105 13 110 112 113 126...

所以,我的实现是这样的:

data.replace("\\", "!");
data.remove("\"");
data.replace("!", "\"");

它一直按预期运行,直到remove,但是此后它又添加了额外的",而我最终得到的输出是: "v=0\"r\"no=- 757357016964659282 2 IN IP4 127.0.0.1\"r\"ns=-\"r\"nt=0 0\"r\"na=group:BUNDLE audio video\"r\"na=msid-semantic: WMS\"r\"nm=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 102 0 8 106 105 13 110 112 113 126...

任何变通的想法都会很棒。

2 个答案:

答案 0 :(得分:1)

看来,您并不是要用!代替\,而是要从字符串中删除双反斜杠和转义引号。

您可以通过以下两行来实现:

data.remove("\\\""); // remove \"
data.replace("\\\\", "\\"); // replace \\ with \

答案 1 :(得分:0)

您正在将调试输出与字符串的内容混淆,大多数调试环境都提供了类似C的转义功能。请记住,您可以毫无疑问地断言字符串中的内容。发挥作用:

#include <QtCore>
int main() {
  //         01234567 89AB
  QString s("abc!def\\ghi\"");
  auto const originalSize = s.size();
  Q_ASSERT(originalSize == (3*3 + 3)); // three 3-letter groups, and three punctuation characters
  Q_ASSERT(!s.startsWith('\"')); // doesn't start with a quote
  Q_ASSERT(s.startsWith('a'));
  Q_ASSERT(s[3] == '!');
  Q_ASSERT(s[7] == '\\');
  Q_ASSERT(s[11] == '\"');
  s.replace('!', '\\');
  Q_ASSERT(s.size() == originalSize); // the size hasn't changed 
  Q_ASSERT(s[3] == '\\');
  qDebug() << s;
}

您可以使用此示例来播放字符串内容,以向自己证明您了解正在发生的事情。请注意,尽管字符串中没有其他引号,但调试输出仍将如下所示。

"abc\\def\\ghi\""