2013-02-18 7 views
5

Sto scrivendo script Python che sta generando codice C++ basato sui dati.Come sfuggire alla stringa per C++ generato?

devo variabile pitone string che contiene una stringa che può essere composto di personaggi come " o capo.

Qual è il modo migliore per evitare questa stringa per la generazione del codice?

+1

Non è meglio risolvere questo problema utilizzando un motore di template come [jinja] (http://jinja.pocoo.org/docs/templates/) che può già sfuggire ai caratteri; So che ho già fatto simili prima di generare codice Java - Sono consapevole che forse ho interpretato male la tua domanda. – sotapme

risposta

3

Il modo in cui utilizzo si basa sull'osservazione che le stringhe in C++ basicamente rispettano le stesse regole per quanto riguarda i caratteri e l'escaping come stringa Javascript/JSON.

Python dalla versione 2.6 ha una libreria JSON incorporata che può serializzare i dati Python in JSON. Pertanto, il codice è, assumendo che non abbiamo bisogno che racchiude citazioni, così come segue:

import json 
string_for_printing = json.dumps(original_string).strip('"') 
+2

Tranne quando ci sono caratteri Unicode nella stringa. O quando finisce con una citazione. Inoltre non funziona per i dati binari. Scappare dati arbitrari per C++ pur mantenendo leggibile non è così facile come sembra - l'ultima volta che l'ho fatto ho finito per trasformare ogni singolo byte in un modulo \ xNN. –

1

io uso questo codice, finora senza problemi:

def string(s, encoding='ascii'): 
    if isinstance(s, unicode): 
     s = s.encode(encoding) 
    result = '' 
    for c in s: 
     if not (32 <= ord(c) < 127) or c in ('\\', '"'): 
     result += '\\%03o' % ord(c) 
     else: 
     result += c 
    return '"' + result + '"' 

Esso utilizza ottale sfugge per evitare tutti i personaggi potenzialmente problematici.