Как преобразовать строку Python в ее экранированную версию в C ++? - PullRequest
2 голосов
/ 09 февраля 2020

Я пытаюсь написать программу Python, которая читает файл и печатает содержимое в виде одной строки, как это будет экранировано в формате C ++. Это потому, что строка будет скопирована из вывода Python и вставлена ​​в программу C ++ (определение строковой переменной C ++).

В основном я хочу преобразовать

<!DOCTYPE html>
<html>
<style>
.card{
    max-width: 400px;
     min-height: 250px;
     background: #02b875;
     padding: 30px;
     box-sizing: border-box;
     color: #FFF;
     margin:20px;
     box-shadow: 0px 2px 18px -4px rgba(0,0,0,0.75);
}
</style>

<body>
<div class="card">
  <h4>The ESP32 Update web page without refresh</h4><br>
  <h1>Sensor Value:<span id="ADCValue">0</span></h1><br>
</div>
</body>

<script>
setInterval(function() {
  // Call a function repetatively with 0.1 Second interval
  getData();
}, 100); //100mSeconds update rate

function getData() {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      document.getElementById("ADCValue").innerHTML =
      this.responseText;
    }
  };
  xhttp.open("GET", "readADC", true);
  xhttp.send();
}
</script>
</html>

в эту

<!DOCTYPE html>\n<html>\n<style>\n.card{\n    max-width: 400px;\n     min-height: 250px;\n     background: #02b875;\n     padding: 30px;\n     box-sizing: border-box;\n     color: #FFF;\n     margin:20px;\n     box-shadow: 0px 2px 18px -4px rgba(0,0,0,0.75);\n}\n</style>\n\n<body>\n<div class=\"card\">\n  <h4>The ESP32 Update web page without refresh</h4><br>\n  <h1>Sensor Value:<span id=\"ADCValue\">0</span></h1><br>\n</div>\n</body>\n\n<script>\nsetInterval(function() {\n  // Call a function repetatively with 0.1 Second interval\n  getData();\n}, 100); //100mSeconds update rate\n\nfunction getData() {\n  var xhttp = new XMLHttpRequest();\n  xhttp.onreadystatechange = function() {\n    if (this.readyState == 4 && this.status == 200) {\n      document.getElementById(\"ADCValue\").innerHTML =\n      this.responseText;\n    }\n  };\n  xhttp.open(\"GET\", \"readADC\", true);\n  xhttp.send();\n}\n</script>\n</html>

Используя эту программу Python:

if __name__ == '__main__':
    with open(<filepath>) as html:
        contents = html.read().replace('"', r'\"')

    print(contents)
    print('')
    print(repr(contents))

Я получаю именно то, что хочу, за исключением двойных обратных косых черт, когда "экранирую" двойные кавычки. Я пробовал несколько случайных вещей, но все попытки либо избавиться от обоих обратных слешей, либо вообще не изменять строку.

Я просто хочу добавить один обратный слэш sh перед всеми двойными цитаты в моей строке. Это возможно даже в Python?

1 Ответ

1 голос
/ 09 февраля 2020

Вы можете использовать str.translate для сопоставления проблемных персонажей с их экранированными эквивалентами. Так как правила python для символов escape и кавычек могут быть немного барочными, я просто грубо заставил их следовать.

# escapes for C literal strings
_c_str_trans = str.maketrans({"\n": "\\n", "\"":"\\\"", "\\":"\\\\"})

if __name__ == '__main__':
    with open(<filepath>) as html:
        contents = html.read().translate(_c_str_trans)

    print(contents)
    print('')
    print(repr(contents))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...