Saltar al contenido principal

Parámetros de codificación porcentual

Partes de la X API, en particular aquellas relacionadas con firmas OAuth, requieren que las cadenas se codifiquen de acuerdo con RFC 3986, Sección 2.1. Dado que muchas implementaciones de algoritmos de codificación de URL no son totalmente compatibles con la RFC 3986, las codificaciones erróneas son la causa de muchos errores de firma OAuth. Por esta razón, el algoritmo de firma exacto que se debe usar se describe en esta página. Esta página cubre el proceso de codificación de URL descrito en RFC 3986, Sección 2.1. Te recomendamos consultar esa especificación en caso de cualquier ambigüedad o conflicto con este documento.  

Codificar una cadena

El siguiente algoritmo asume que estás codificando una cadena SRC copiando sus valores byte a byte a una cadena DST. Paso 1: Mientras SRC contenga bytes sin leer, lee el siguiente byte (8 bits) de SRC. Normalmente se considera que esto es un carácter, pero en el caso de codificaciones en las que un carácter puede ocupar más de un byte (como UTF-8), solo lee el primer byte. Paso 2: Comprueba si el byte leído coincide con alguno de los siguientes equivalentes ASCII. La siguiente tabla se ha dividido en filas para facilitar la lectura, pero solo necesitas determinar si el byte leído aparece en la tabla, no en qué fila específica.
NombreCaracteres ASCIIValores de byte equivalentes
Dígitos‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39
Letras mayúsculas‘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
Letras minúsculas‘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
Caracteres reservados‘-‘, ‘.’, ‘_’, ‘~’0x2D, 0x2E, 0x5F, 0x7E
Paso 2b: Si el byte no aparece en la tabla anterior, continúa. Cualquier otro valor debe codificarse. Paso 2a: Si el byte aparece en la tabla anterior, cópialo en DST y vuelve al Paso 1. Los caracteres enumerados en la tabla anterior no necesitan escaparse, así que simplemente copiarás el byte directamente. Paso 3: Escribe el carácter ‘%’ en DST. El carácter de porcentaje ‘%’ (o 0x25 en hexadecimal y 00100101 en binario) indica que los dos bytes siguientes representarán un byte codificado. Paso 4: Escribe en DST dos caracteres que representen el valor hexadecimal, en mayúsculas y codificado en ASCII, del byte actual. Esto es un poco confuso, así que aquí tienes un ejemplo. Supón que el byte actual es 0xE6 (11100110 en binario). Esto corresponde al valor codificado en UTF-8 de ‘æ’. Para codificar este valor, escribe el carácter ‘E’ (0x45, de la tabla anterior) y luego el carácter ‘6’ (0x36) en DST. Los últimos tres caracteres que se deberían haber escrito son “%E6”. Ten en cuenta que, si escribes una letra como A, B, C, D, E o F, debes usar el carácter en mayúscula. Paso 5: Vuelve al Paso 1. Continúa hasta que la totalidad de SRC se haya copiado en DST.  

Ejemplos

Los siguientes ejemplos pueden ser útiles para comparar con el resultado de tu propio código. Debes considerar cualquier diferencia como un error. Los espacios codificados como caracteres “+” son un ejemplo de codificación incorrecta.
Cadena originalCadena codificada
Ladies + GentlemenLadies%20%2B%20Gentlemen
An encoded string!An%20encoded%20string%21
Dogs, Cats & MiceDogs%2C%20Cats%20%26%20Mice
%E2%98%83