Passer au contenu principal

Encodage des paramètres en pourcentage

Certaines parties de la X API, en particulier celles qui concernent les signatures OAuth, exigent que les chaînes soient encodées conformément à la RFC 3986, section 2.1. Étant donné que de nombreuses implémentations d’algorithmes d’encodage d’URL ne sont pas entièrement compatibles avec la RFC 3986, des encodages incorrects sont à l’origine de nombreuses erreurs de signature OAuth. Pour cette raison, l’algorithme de signature précis à utiliser est décrit sur cette page. Cette page traite du processus d’encodage d’URL décrit dans la RFC 3986, section 2.1. Nous vous encourageons à consulter cette spécification en cas d’ambiguïté ou de conflit avec le présent document.  

Encodage d’une chaîne

L’algorithme suivant suppose que vous encodez une chaîne SRC en copiant ses valeurs, octet par octet, vers une chaîne DST. Étape 1 : Tant que SRC contient des octets non lus, lisez l’octet suivant (8 bits) depuis SRC. En général, il s’agit d’un caractère, mais pour les encodages où un caractère peut occuper plus d’un octet (comme UTF‑8), lisez simplement le premier octet. Étape 2 : Vérifiez si l’octet lu correspond à l’un des équivalents ASCII suivants. Le tableau ci-dessous est présenté en plusieurs lignes pour des raisons de lisibilité, mais vous devez seulement déterminer si l’octet lu figure dans le tableau, pas dans quelle ligne.
NomCaractères ASCIIValeurs d’octets équivalentes
Chiffres‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39
Lettres majuscules‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’, ‘H’, ‘I’, ‘J’, ‘K’, ‘L’, ‘M’, ‘N’, ‘O’, ‘P’, ‘Q’, ‘R’, ‘S’, ‘T’, ‘U’, ‘V’, ‘W’, ‘X’, ‘Y’, ‘Z’0x41, 0x42, 0x43, 0x44, 0x45,0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B,0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51,0x52, 0x53, 0x54, 0x55, 0x56, 0x57,0x58, 0x59, 0x5A
Lettres minuscules‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’, ‘h’, ‘i’, ‘j’, ‘k’, ‘l’, ‘m’, ‘n’, ‘o’, ‘p’, ‘q’, ‘r’, ‘s’, ‘t’, ‘u’, ‘v’, ‘w’, ‘x’, ‘y’, ‘z’0x61, 0x62, 0x63, 0x64, 0x65,0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B,0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71,0x72, 0x73, 0x74, 0x75, 0x76, 0x77,0x78, 0x79, 0x7A
Caractères réservés‘-‘, ‘.’, ‘_’, ‘~’0x2D, 0x2E, 0x5F, 0x7E
Étape 2b : Si l’octet ne figure pas dans le tableau ci-dessus, continuez. Toute autre valeur doit être encodée. Étape 2a : Si l’octet figure dans le tableau ci-dessus, copiez-le dans DST et revenez à l’étape 1. Les caractères figurant dans le tableau ci-dessus n’ont pas besoin d’être échappés ; copiez simplement l’octet tel quel. Étape 3 : Écrivez le caractère ‘%’ dans DST. Le caractère pourcentage ‘%’ (0x25 en hexadécimal, 00100101 en binaire) indique que les deux caractères suivants représenteront un octet encodé. Étape 4 : Écrivez deux caractères représentant la valeur hexadécimale, en lettres majuscules ASCII, de l’octet courant dans DST. C’est un peu déroutant ; voici un exemple. Supposons que l’octet courant soit 0xE6 (11100110 en binaire). Cela correspond à la valeur encodée en UTF‑8 de ‘æ’. Pour encoder cette valeur, écrivez le caractère ‘E’ (0x45, d’après le tableau ci-dessus), puis le caractère ‘6’ (0x36) dans DST. Les trois derniers caractères écrits doivent être “%E6”. Notez que si vous écrivez une lettre telle que A, B, C, D, E ou F, vous devez utiliser la majuscule. Étape 5 : Revenez à l’étape 1. Continuez jusqu’à ce que l’intégralité de SRC soit copiée dans DST.  

Exemples

Les exemples suivants peuvent vous aider à comparer avec la sortie de votre propre code. Vous devez considérer toute différence comme une erreur. Les espaces encodés sous forme de caractères « + » constituent un exemple d’encodage incorrect.
Chaîne d’origineChaîne encodée
Ladies + GentlemenLadies%20%2B%20Gentlemen
An encoded string!An%20encoded%20string%21
Dogs, Cats & MiceDogs%2C%20Cats%20%26%20Mice
%E2%98%83
I