Dans quel jeu de caractères devrais-je supposer que les caractères codés d'une URL sont?
-
02-07-2019 - |
Question
RFC 1738 spécifie la syntaxe des URL, et mentionne que
Les URL sont écrites uniquement avec le graphique. caractères imprimables du
Jeu de caractères codés US-ASCII. le les octets 80-FF hexadécimaux ne sont pas
utilisé en US-ASCII, et les octets 00-1F et 7F hexadécimal représentent
caractères de contrôle; ceux-ci doivent être codé.
Cependant, le code définissant ces octets n'est pas précisé.
RFC 2396 semble tenter d'améliorer la situation, mais:
Pour les séquences de caractères originales qui contiennent des caractères non-ASCII, cependant, la situation est plus difficile. Protocoles Internet qui transmettent des séquences d’octets destinées à représenter des séquences de caractères devraient fournir un moyen de identifiant le jeu de caractères utilisé, s'il peut y avoir plus d'un [RFC2277]. Cependant, il n’existe actuellement aucune disposition dans le syntaxe d'URI générique pour accomplir cette identification. Un URI individuel schéma peut nécessiter un seul jeu de caractères, définir un jeu de caractères par défaut ou fournir un moyen d'indiquer le jeu de caractères utilisé.
On s’attend à ce qu’un traitement systématique du codage des caractères au sein de l’URI soit développé comme une modification future de cette spécification.
Existe-t-il un moyen sans équivoque permettant à un client de déterminer dans quel jeu de caractères interpréter les octets codés, ou dans lequel un serveur peut déterminer le type de client utilisé pour coder?
Il me semble que la plupart des serveurs utilisent UTF-8 par défaut, mais cela semble être un choix de facto plutôt qu'un choix spécifié.
La solution
Selon votre devis, les URL sont en ASCII. C'est tout.
Les URI OTOH, autorisent de plus grands jeux de caractères; généralement UTF-8 comme vous l'avez dit vous-même.
Le point à retenir est que les URL sont un sous-ensemble d’URI. La vraie question est donc de savoir lequel de ces éléments est ce que vous écrivez dans un navigateur.
Je suppose que vous pouvez écrire un URI et le navigateur doit faire de son mieux pour le transformer en une URL (prise en charge par HTTP / 1.1, AFAICR). Pour les caractères non-ASCII, cela signifie des codes hexadécimaux, codant généralement UTF-8.
Autres conseils
Je pense que la spécification que vous recherchez est la la RFC 3987 , qui décrit les IRI - Internationalized Identifiants de ressources.