Passer au contenu principal

Paramètres d’encodage en pourcentage

Certaines parties de la X API, en particulier celles qui traitent des signatures OAuth, exigent que les chaînes soient encodées conformément à la RFC 3986, section 2.1. Comme de nombreuses implémentations d’algorithmes d’encodage d’URL ne respectent pas entièrement la RFC 3986, un encodage incorrect est à l’origine de nombreuses erreurs de signature OAuth. C’est pourquoi nous décrivons sur cette page l’algorithme de signature exact à utiliser. Cette page couvre le processus d’encodage d’URL décrit dans la RFC 3986, section 2.1. Nous vous invitons à consulter cette spécification en cas d’ambiguïté ou de conflit avec ce document.  

Encodage d’une chaîne de caractères

L’algorithme suivant part du principe que vous encodez une chaîne SRC en copiant ses valeurs octet par octet dans une chaîne DST. Étape 1 : Tant que SRC contient des octets non lus, lisez l’octet suivant (8 bits) à partir de SRC. En général, celui‑ci est considéré comme un caractère, mais dans le cas d’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 a été découpé en plusieurs lignes pour plus de lisibilité, mais vous avez seulement besoin de déterminer si l’octet lu figure dans le tableau, et non dans quelle ligne spécifique.
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 retournez à l’étape 1. Les caractères répertoriés dans le tableau ci‑dessus n’ont pas besoin d’être échappés, vous copierez donc simplement l’octet directement. Étape 3 : Écrivez le caractère ‘%’ dans DST. Le symbole de pourcentage ‘%’ (ou 0x25 en hexadécimal et 00100101 en binaire) indique que les deux octets suivants représenteront un octet encodé. Étape 4 : Écrivez dans DST deux caractères représentant la valeur hexadécimale ASCII encodée en majuscules de l’octet courant. Cela peut être un peu déroutant, voici donc un exemple. Supposons que l’octet courant soit 0xE6 (11100110 en binaire). Cela correspond à la valeur encodée en UTF‑8 du caractère ‘æ’. Pour encoder cette valeur, écrivez le caractère ‘E’ (0x45, issu du tableau ci‑dessus) puis le caractère ‘6’ (0x36) dans DST. Les trois derniers caractères écrits devraient être « %E6 ». Notez que si vous écrivez une lettre comme A, B, C, D, E ou F, vous devez utiliser la lettre 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 le résultat de votre propre code. Vous devez considérer toute différence comme une erreur. Les espaces codés sous forme de caractères « + » sont un exemple de codage 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