Question
La méthode habituelle de codage d'URL d'un caractère unicode consiste à le scinder en 2% codes HH. ( \ u4161 = > % 41% 61 )
Mais comment distinguer l'unicode lors du décodage? Comment savoir que % 41% 61 est \ u4161 et \ x41 \ x61 ("Aa")?
Les caractères 8 bits nécessitant un codage sont-ils précédés de % 00 ?
Ou, est-ce que le point que les caractères Unicode sont supposés être perdus / divisés?
La solution
Selon Wikipedia :
Norme actuelle
La syntaxe générique d’URI prescrit que les nouveaux schémas d’URI qui prévoient la représentation de les données de caractère dans un URI doivent effet, représentent des personnages du ensemble non réservé sans traduction, et devrait convertir tous les autres caractères en octets selon UTF-8, puis encoder ceux-ci en pourcentage valeurs. Cette exigence était introduit en janvier 2005 avec le publication de la RFC 3986. Schémas d'URI introduits avant cette date ne sont pas affecté.
Non traité par le courant spécification est ce qu'il faut faire avec données codées. Par exemple, dans les ordinateurs, les manifestes de données de caractères sous forme codée, à un certain niveau, et donc pourrait être traité soit comme binaire données ou en tant que données de caractères lors de mappé sur des caractères URI. Probablement, c'est au schéma d'URI spécifications pour tenir compte de cette possibilité et nécessite un ou la autre, mais en pratique, peu, voire aucun, fait réellement.
Implémentations non standard
Il existe un encodage non standard pour les caractères Unicode:% uxxxx, où xxxx est une valeur Unicode représentée par quatre chiffres hexadécimaux. Ce comportement n'est pas spécifié par une RFC et a été rejetée par le W3C. Le troisième L’édition de l’ECMA-262 inclut toujours un fonction d'échappement (chaîne) qui utilise cette syntaxe, mais aussi un encodeURI (uri) fonction qui se transforme en UTF-8 et pourcentage-code chaque octet.
Donc, il semble que cela incombe entièrement à la personne qui écrit la méthode de décodage ... Les normes ne sont-elles pas amusantes?
Autres conseils
Ce que j'ai toujours fait est tout d'abord de coder en UTF-8 une chaîne Unicode pour en faire une série de caractères 8 bits avant d'échapper à ceux avec% HH.
P.S. - J'espère seulement que les implémentations non standard (% uxxxx) sont rares.
Puisque les URI ont été introduits avant l’unicode, ou du moins qu’ils soient largement utilisés, j’imagine que c’est une question très spécifique à la mise en œuvre. Le codage UTF-8 de votre texte, puis son échappement normal semble être la meilleure idée, car il est totalement compatible avec tous les systèmes ASCII / ANSI en place, bien que vous puissiez obtenir un ou plusieurs caractères étranges.
À l’autre extrémité, pour décoder, vous détournez votre texte et obtenez une chaîne UTF-8. Si une personne utilisant un ancien système essaie de vous envoyer des données en ASCII / ANSI, vous ne risquez rien, c'est déjà (presque) encodé en UTF-8.