Échappeur format printf
« Progress: 50% complete » devient « Progress: 50%% complete » : printf affiche alors le signe pour cent au lieu d'y voir une conversion. Retours à la ligne, tabulations et barres obliques inverses s'écrivent \n, \t et \\, et le déséchappement les rétablit. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Exemple résolu
- Texte
- Progress: 50% complete next step
- Mode de calcul
- Escape
- Résultat
- Progress: 50%% complete\nnext step
- Longueur
- 34
- Nombre de pourcentages
- 1
- Nombre d'échappements
- 1
Les chaînes de format de la famille printf traitent un signe pour cent isolé comme le début d'une spécification de conversion, de sorte qu'un texte libre contenant un pour cent—libellés de progression, notes monétaires, modèles de journal—plantera, sera mal analysé ou consommera les mauvais arguments à moins que chaque pour cent littéral soit doublé en %%. En parallèle, les corps de format vivent souvent dans des littéraux de code source ou des fichiers de configuration où retours à la ligne, tabulations et barres obliques inverses doivent s'écrire sous forme d'échappements. Cet échappeur de format printf transforme du texte brut en un corps de format sûr en doublant chaque pour cent et en réécrivant les caractères de contrôle et les barres comme \\ , \n, \r, \t ou \xHH, et inverse la même carte lorsque vous devez retrouver les caractères d'origine.
Comment fonctionnent le doublement du pour cent et les échappements par barre en printf
Dans le printf de C, les iostreams C++ qui acceptent des chaînes de style printf, le vieux formatage % de Python et de nombreuses bibliothèques de journalisation, un caractère pour cent commence une conversion : %s, %d, %.2f, %.*s et les formes positionnelles comme %1$s commencent toutes par un seul pour cent. Pour imprimer un pour cent littéral, vous devez en écrire deux d'affilée—%%—afin que le formateur émette un % et ne cherche pas une lettre de conversion.
Oublier cette règle est un bug classique : un message comme "done 50%" devient une erreur de format ou vole l'argument suivant. Cette capacité applique les deux couches de façon déterministe. En mode escape elle parcourt chaque caractère, remplace chaque % par %%, transforme barres et contrôles usuels en l'échappement portable le plus court, et laisse le texte imprimable ordinaire inchangé.
En mode unescape elle replie %% en un seul pour cent, développe les séquences supportées, laisse un pour cent isolé (début d'une vraie conversion) tel quel pour décoder des modèles mixtes, et rejette les barres finales, les séquences \x incomplètes, les chiffres non hex et les lettres d'échappement inconnues qui seraient indéfinies en lecture stricte.
Ce que vous envoyez et ce que vous recevez
Envoyez un champ chaîne obligatoire nommé text et un champ optionnel mode. Lorsque mode est omis, escape est la valeur par défaut, de sorte qu'une seule charge utile reste utile. Le mode escape convertit le texte brut en un corps de format sûr pour printf stocké dans result : chaque pour cent est doublé, les barres deviennent \\ et les contrôles deviennent \n, \r, \t ou \xHH.
Le mode unescape inverse ces séquences et renvoie la chaîne récupérée dans result. Les échecs de validation ne consomment pas le solde prépayé. Les contrôles classiques incluent l'échappement d'une ligne de progression avec un pour cent isolé et un saut de ligne, le déséchappement d'un corps qui utilise %% et \t, l'aller-retour d'une chaîne qui contient déjà des barres, et le rejet d'une chaîne qui se termine par une barre seule.
Où un échappeur de format printf apporte une valeur réelle
Les générateurs de code qui émettent des modèles de journal, des catalogues de localisation et des messages d'assertion pour C, C++ ou des runtimes compatibles printf doivent échapper chaque champ de texte libre avant de l'écrire dans une chaîne de format, sinon un seul pour cent dans un nom de produit corrompra le format et cassera la compilation ou plantera à l'exécution.
Les équipes de micrologiciel embarqué et de pilotes collent des dumps de protocole et des messages opérateur qui contiennent déjà %% et des séquences \n et ont besoin d'un chemin d'unescape qui échoue bruyamment sur des \xHH tronqués au lieu d'inventer des octets. Les sites de documentation et livres de recettes qui montrent des exemples printf à copier-coller ont besoin d'un chemin d'échappement fiable pour que les échantillons fournis par l'utilisateur restent des corps de format valides.
Les pipelines QA et CI comparent des vecteurs dorés d'escape et d'unescape entre hôtes pour qu'un pour cent littéral soit toujours %% et un saut de ligne toujours \n. Les auteurs de cursus qui enseignent la syntaxe printf veulent des exemples qui mentionnent explicitement le doublement du pour cent, intention de recherche que cette page capture.
Si vous avez besoin de littéraux de chaînes C complets, d'échappements JavaScript, d'entités HTML ou d'encodage pourcent d'URL, traitez-les comme des intentions et pages distinctes plutôt que de surcharger cette page d'échappeur de format printf.
Cas d’usage
Corps de format printf sûrs dans le code généré
Échappez titres, libellés de progression et messages opérateur en texte libre avant de les écrire dans des chaînes de format style printf afin que chaque pour cent littéral devienne %%.
Vecteurs dorés pour tests unitaires de chaînes de format
Faites l'aller-retour de messages d'exemple par escape et unescape en CI pour que le doublement du pour cent et les échappements de contrôle restent stables entre hôtes et toolchains.
Questions fréquentes
Pourquoi printf exige-t-il de doubler les signes pour cent ?
Un seul % commence une conversion comme %s ou %d. Écrire %% émet un pour cent littéral et empêche le formateur de consommer des arguments ou d'échouer sur une conversion manquante.
Puis-je à la fois échapper et déséchapper ?
Oui. Réglez mode sur escape (par défaut) pour encoder du texte brut en corps sûr pour printf, ou mode sur unescape pour inverser le doublement du pour cent et les échappements par barre pris en charge.
Que devient un % isolé lors du déséchappement ?
Il est laissé tel quel afin que de vraies conversions comme %s restent intactes.
Que se passe-t-il si une séquence d'échappement est mal formée ?
Rien n'est facturé pour les échecs de validation.
Combien cela coûte-t-il ?
L'outil navigateur est gratuit et s'exécute en local.
Outils associés
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/enc/printf-escape \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Progress: 50% complete\nnext: %s"}'const res = await fetch("https://api.kit.forhosting.com/enc/printf-escape", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "Progress: 50% complete\nnext: %s"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/printf-escape",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "Progress: 50% complete\nnext: %s"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/printf-escape", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"Progress: 50% complete\\nnext: %s"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"Progress: 50% complete\nnext: %s"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/printf-escape", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"text": "Progress: 50% complete\nnext: %s"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.printf_escape",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |
Notes techniques
Le déséchappement comprend %% et les formes listées, laisse intacts les pour cent isolés qui introduisent de vraies conversions comme %s ou %d, et échoue immédiatement avec invalid_input sur une barre finale, un échappement hex incomplet ou une lettre d'échappement inconnue au lieu d'inventer un demi-décode.
Comment fonctionnent le doublement du pour cent et les échappements par barre en printf
Séparément, lorsque la même chaîne est intégrée dans du code source ou des configs de type JSON, un saut de ligne brut est souvent illégal ou gênant, aussi les auteurs écrivent \n pour un saut de ligne, \t pour une tabulation, \\ pour une seule barre inverse, et parfois \xHH pour d'autres octets de contrôle. Le chemin est un travail pur de chaînes sans réseau, sans graines aléatoires et sans horodatage horloge, de sorte que des entrées identiques produisent toujours un JSON identique. Le tarif des appels API réussis est la base publiée de $0.002 par élément, et les échecs de validation ne consomment pas le solde prépayé.
Ce que vous envoyez et ce que vous recevez
La réponse répète mode et le text d'origine, puis inclut result, la longueur de result, percent_count (combien de pour cent ont été doublés à l'escape ou dédoublés à l'unescape, y compris la forme optionnelle \%) et escape_count (combien de transformations de style barre ont été appliquées). Text manquant, objets non chaîne, valeurs de mode non prises en charge, chaînes plus longues que le maximum documenté, barres finales, échappements hex incomplets, chiffres non hex après \x et lettres d'échappement inconnues échouent avec invalid_input et un message clair en anglais. Le prix API en cas de succès est la base publiée de $0.002 par élément.
Où un échappeur de format printf apporte une valeur réelle
Comme cette capacité est un moteur d'analyse pur, le prix API est la base publiée de $0.002 par élément réussi et une validation échouée ne consomme pas le solde.
Cas d'intégration
Décoder des modèles de format depuis journaux et fixtures
Déséchappez des corps style printf qui utilisent %% et des échappements par barre vers un texte lisible, avec des échecs stricts sur des séquences incomplètes ou illégales.