Pular para o conteúdo principal

Parâmetros de codificação percentual

Partes da X API, especialmente as que lidam com assinaturas OAuth, exigem que strings sejam codificadas de acordo com a RFC 3986, Seção 2.1. Como muitas implementações de algoritmos de codificação de URL não são totalmente compatíveis com a RFC 3986, codificações incorretas causam muitos erros de assinatura OAuth. Por esse motivo, o algoritmo exato de assinatura a ser usado é detalhado nesta página. Esta página aborda o processo de codificação de URL descrito na RFC 3986, Seção 2.1. Recomendamos consultar essa especificação em caso de qualquer ambiguidade ou conflito com este documento.  

Codificação de uma string

O algoritmo a seguir pressupõe que você está codificando uma string SRC copiando seus valores, byte a byte, para uma string DST. Etapa 1: Enquanto SRC contiver bytes não lidos, leia o próximo byte (8 bits) de SRC. Normalmente, isso é considerado um caractere, mas, no caso de codificações em que um caractere pode ter mais de um byte (como UTF-8), leia apenas o primeiro byte. Etapa 2: Verifique se o byte lido corresponde a algum dos seguintes equivalentes ASCII. A tabela a seguir foi dividida em linhas para facilitar a leitura, mas você só precisa determinar se o byte lido existe na tabela, não a linha específica.
NomeCaracteres 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 maiú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
Etapa 2b: Se o byte não estiver listado na tabela acima, continue. Qualquer outro valor deve ser codificado. Etapa 2a: Se o byte estiver listado na tabela acima, copie-o para DST e volte à Etapa 1. Os caracteres listados na tabela acima não precisam ser escapados, então você apenas copiará o byte diretamente. Etapa 3: Escreva o caractere ‘%’ em DST. O caractere de porcentagem ‘%’ (ou 0x25 em hexadecimal e 00100101 em binário) indica que os próximos dois bytes representarão um byte codificado. Etapa 4: Escreva dois caracteres representando o valor hexadecimal, em ASCII maiúsculo, do byte atual em DST. Isso pode ser um pouco confuso, então aqui vai um exemplo. Suponha que o byte atual seja 0xE6 (11100110 em binário). Isso corresponde ao valor codificado em UTF-8 de ‘æ’. Para codificar esse valor, escreva o caractere ‘E’ (0x45, da tabela acima) e, em seguida, o caractere ‘6’ (0x36) em DST. Os últimos três caracteres escritos devem ser “%E6”. Observe que, se você escrever uma letra como A, B, C, D, E ou F, deverá usar a letra maiúscula. Etapa 5: Retorne à Etapa 1. Continue até que todo o conteúdo de SRC seja copiado para DST.  

Exemplos

Os exemplos a seguir podem ajudar a comparar com a saída do seu próprio código. Você deve considerar quaisquer diferenças como erro. Espaços codificados como o caractere “+” são um exemplo de codificação incorreta.
String originalString codificada
Ladies + GentlemenLadies%20%2B%20Gentlemen
An encoded string!An%20encoded%20string%21
Dogs, Cats & MiceDogs%2C%20Cats%20%26%20Mice
%E2%98%83
I