Pergunta
O método usual de URL-codifica um caractere unicode é dividi-la em códigos HH 2%. (
Mas, como é unicode distinguido ao decodificar? Como você sabe que % 41% 61 é \ u4161 vs. \ x41 \ x61 ( "AA")?
São caracteres de 8 bits, que exigem codificação, precedido por % 00 ?
Ou, é o ponto que caracteres unicode é suposto ser perdido / split?
Solução
De acordo com a Wikipedia :
padrão atual
Os genéricos URI mandatos de sintaxe que novos esquemas URI que fornecem para a representação de dados de caracteres em uma obrigação URI, em efeito, representar caracteres a partir da conjunto sem reservas sem tradução, e deve converter todos os outros caracteres para bytes de acordo com UTF-8, e, em seguida, por cento-codificar aqueles valores. Esta exigência foi introduzido em Janeiro de 2005 com o publicação do RFC 3986. esquemas URI introduzido antes desta data não são afectados.
Não dirigida pela corrente especificação é o que fazer com dados de caracteres codificados. Por exemplo, em computadores, manifestos de dados de caracteres de forma codificada, em algum nível, e assim, pode ser tratado como qualquer binário de dados ou como dados de caracteres quando estar mapeados para caracteres URI. Presumivelmente, cabe ao esquema URI Especificações para explicar essa possibilidade e exigem um ou outra, mas, na prática, poucos, se houver, realmente fazer.
implementações não-padrão
Existe uma codificação não padronizado para caracteres Unicode:% uxxxx, onde xxxx é um valor Unicode como representado quatro dígitos hexadecimais. Esse comportamento não é especificado por qualquer RFC e possui foi rejeitado pelo W3C. O terceiro edição do ECMA-262 ainda inclui um função de escape (string) que usa esse sintaxe, mas também uma encodeURI (uri) função que se converte em UTF-8 e cento-codifica cada octeto.
Assim, parece que a sua inteiramente até a pessoa que escreve o método unencode ... não são divertidos padrões?
Outras dicas
O que eu sempre fiz é o primeiro UTF-8 codificar uma seqüência de caracteres Unicode para torná-lo uma série de caracteres de 8 bits antes de escapar qualquer um os com% HH.
P.S. - Eu só posso esperar as implementações não-padrão (% uxxxx) são poucos e distantes entre si
.Uma vez que foram introduzidas URI antes unicode estava por perto, ou pelo menos em amplo uso, Eu imagino que isso é uma questão muito específica de implementação. UTF-8 codificação de seu texto, então escapar que por sons normais, como a melhor idéia, já que é totalmente compatível com qualquer ASCII / sistemas ANSI no lugar, embora você pode ter o caráter estranho ou os dois impares.
No outro extremo, a decodificação, você unescape seu texto, e obter uma string UTF-8. Se alguém usando um tentativas sistema antigo para enviar seu alguns dados em ASCII / ANSI, não há nenhum dano feito, que de (quase) UTF-8 já codificado.