Utf-8 dans \url

Bonjour,

Depuis longtemps, les url peuvent contenir des caractères en UTF-8, en tout cas bien au delà de Latin-1.
Un exemple typique est le site de Wikipedia qui traite du Ꝃ (« K barré » cher aux Bretons, dont le code est U+A742): https://fr.wikipedia.org/wiki/Ꝃ

Mais \url imprime ou pas (selon le style d’url) le Ꝃ de l’adresse

et surtout donne une adresse cliquable fausse.

Comment faire ?

Merci…

Jacques André

ECM:

\documentclass{article}
\usepackage{fontspec}
\setmainfont{EBgaramond}
\usepackage[pdfencoding=auto]{hyperref}
\begin{document}
pour Ꝃ (= \char"A742)  voir 
\url{https://fr.wikipedia.org/wiki/Ꝃ}

\urlstyle{same}
\url{https://fr.wikipedia.org/wiki/Ꝃ}

\end{document}

Bonjour

Heu, avec lualatex, les deux adresses cliquables sont correctes.

Le fait que le K barré n’apparaisse pas dans la première url doit être dû au fait que la fonte typewriter utilisée ne l’a pas ; dans le log, je vois :

Missing character: There is no Ꝃ (U+A742) in font [lmmono10-regular]:!

François

Le 09/11/2023 à 09:35, Jacques André a écrit :

Bonjour,

Depuis longtemps, les url peuvent contenir des caractères en UTF-8, en tout cas bien au delà de Latin-1.
Un exemple typique est le site de Wikipedia qui traite du Ꝃ (« K barré » cher aux Bretons, dont le code est U+A742):
Ꝃ — Wikipédia https://fr.wikipedia.org/wiki/Ꝃ

Mais \url imprime ou pas (selon le style d’url) le Ꝃ de l’adresse

et surtout donne une adresse cliquable fausse.

Comment faire ?

Merci…

Jacques André

ECM:

\documentclass{article}
\usepackage{fontspec}
\setmainfont{EBgaramond}
\usepackage[pdfencoding=auto]{hyperref}
\begin{document}
pour Ꝃ (= \char"A742)  voir
\url{https://fr.wikipedia.org/wiki/Ꝃ}

\urlstyle{same}
\url{https://fr.wikipedia.org/wiki/Ꝃ}

\end{document}
``

Le 9 nov. 2023 à 10:12, Pétiard François xyz@xyz.tld a écrit :

Bonjour

Heu, avec lualatex,

Pourquoi le spécifier? C’est ce qu’utilise, implicitement, mon ECM par \fontspec{…

les deux adresses cliquables sont correctes.

Curieux: quand j’ouvre l’output de la compilation (fichier.pdf) par Acrobat j’arrive bien au bon site de wikipedia.
Mais et quand je clique directement dans la fenêtre fournie par TeXShop (je suis sur un Mac), ça donne une url qui n’est pas la bonne: https://fr.wikipedia.org/wiki/%C3%8A%C2%9D%C2%82
Et non celle attendue: https://fr.wikipedia.org/wiki/Ꝃ
Problème de TeXShop ?

Le fait que le K barré n’apparaisse pas dans la première url doit être dû au fait que la fonte typewriter utilisée ne l’a pas ; dans le log, je vois :

Missing character: There is no Ꝃ (U+A742) in font [lmmono10-regular]:!

Oups, je n’avais pas lu le log. Navré et merci !
Jacques André

Le 09/11/2023 à 16:57, Jacques André a écrit :

Bonjour

Heu, avec lualatex,

Pourquoi le spécifier? C’est ce qu’utilise, implicitement, mon ECM par
\fontspec{…

Vous auriez pu utiliser XeLaTeX, non ?

François Pétiard

Le 09/11/2023 à 09:35, Jacques André a écrit :

Bonjour,

Depuis longtemps, les url peuvent contenir des caractères en UTF-8, en tout cas bien au delà de Latin-1. Un exemple typique est le site de Wikipedia qui traite du Ꝃ (« K barré » cher aux Bretons, dont le code est U+A742): https://fr.wikipedia.org/wiki/Ꝃ

Les RFC sont clairs: un URL ne peut contenir que de l’ASCII. En revanche, il y a la possibilité d’encoder des caractères Unicode dans un URL ce qui permet éventuellement de les représenter correctement lorsqu’on les affiche. Ce que font les navigateur lorsqu’ils affichent :

https://fr.wikipedia.org/wiki/Ꝃ

Mais lorsqu’on sélectionne ce pseudo URL pour le copier puis le coller ailleurs, on obtient l’URL exact (celui réellement utilisé par le protocole HTTP(S)):

https://fr.wikipedia.org/wiki/%EA%9D%82

Il ne faut donc pas mélanger représentation et encodage.

Cordialement,
--
 Paul Gaborit

Le 9 nov. 2023 à 18:57, Paul Gaborit xyz@xyz.tld a écrit :

Il ne faut donc pas mélanger représentation et encodage.

Merci Paul,
mais comment donc citer depuis LuaLaTeX ce site https://fr.wikipedia.org/wiki/Ꝃ
c.-à-d. ici comment passer de Ꝃ à %EA%9D%82 ? C’est du MIME ? Je m’y perd…

Jacques André

J> mais comment donc citer depuis LuaLaTeX ce site https://fr.wikipedia.org/wiki/Ꝃ <https://fr.wikipedia.org/wiki/%EA%9D%82>
J> c.-à-d. ici comment passer de Ꝃ à %EA%9D%82 ? C’est du MIME ? Je m’y perd…

on dirait en effet de l’UTF-8 avec les caractères 8bit codés en mime. Super bizarre, c’est vraiment le standard ?

Th.

Le 09/11/2023 à 19:11, Jacques André a écrit :

Le 9 nov. 2023 à 18:57, Paul Gaborit xyz@xyz.tld a écrit :

Il ne faut donc pas mélanger représentation et encodage.

Merci Paul,
mais comment donc citer depuis LuaLaTeX ce site https://fr.wikipedia.org/wiki/Ꝃ <https://fr.wikipedia.org/wiki/%EA%9D%82>
c.-à-d. ici comment passer de Ꝃ à %EA%9D%82 ? C’est du MIME ? Je m’y perd…

Dans l’absolu, chaque serveur Web décide de la manière d’encoder les choses.

Mais il se trouve qu’un standard de fait consiste à transformer l’encodage UTF-8 en séquences %xx. Et c’est comme ça que font les navigateurs actuellement pour l’affichage.

En LaTeX, il faut donc utiliser:

\href%
{https://fr.wikipedia.org/wiki/%EA%9D%82}%
{https://fr.wikipedia.org/wiki/Ꝃ}

Le 1er argument est le véritable URL. Le 2e argument n’est que sa représentation affichée (et pourrait d’ailleurs être n’importe quel autre texte).

Si on ne connaît pas le bon URL (donc le 1er argument) mais uniquement sa représentation (donc le 2e argument), il suffit de coller cette représentation dans la barre d’adresse de son navigateur puis de la recopier pour obtenir le véritable URL encodé correctement avec les %xx.

Cordialement,
--
  Paul Gaborit

Le 9 nov. 2023 à 19:11, Jacques André xyz@xyz.tld a écrit :

Le 9 nov. 2023 à 18:57, Paul Gaborit xyz@xyz.tld a écrit :

Il ne faut donc pas mélanger représentation et encodage.

Merci Paul,
mais comment donc citer depuis LuaLaTeX ce site https://fr.wikipedia.org/wiki/Ꝃ
c.-à-d. ici comment passer de Ꝃ à %EA%9D%82 ? C’est du MIME ? Je m’y perd…

Jacques André

Bonjour,

Puisque vous êtes sur Mac, et si la version de macOS est assez récente, vous pouvez employer l’app Raccourcis préinstallée sur votre Mac de la manière suivante.

Créez un nouveau Raccourci en le nommant EncodeURL (vous pouvez aussi le nommer en mettant des espaces entre les mots).

  1. Dans le champ de recherche, tapez « demander », et double-cliquez sur « Demander une entrée ». Il s’affiche alors un bloc « Demander [Texte] avec [Invite] ». Cliquez sur [Invite] et entrez quelque chose comme « Veuillez saisir l’URL à encoder ».
  2. Dans le champ de recherche, tapez « encode », et double-cliquez sur « Encodage d’URL ». Ce bloc se rajoute au bloc précédent.
  3. Dans le champ de recherche, tapez « presse » et double-cliquez sur « Coller dans le presse-papier ». Ce bloc se rajoute au bloc précédent.

Au-dessus du champ de recherche, cliquez sur le i cerclé ⓘ. Dans la partie Détails, cochez « Épingler dans la barre des menus », et si vous pensez en avoir besoin souvent, cliquez sur « Ajouter un raccourci clavier ». Puisque beaucoup de raccourcis clavier simples sont déjà pris par l’OS et les apps, j’ai entré la combinaison ⌘+fn+F1 (puisque sur les clavier Mac, la touche F1 dispose aussi d’un symbole de la fonction de diminution de la luminosité, et qu’il faut l’accompagner de la touche « fn » pour que la touche soit prise en compte en tant que touche de fonction).

Maintenant, testez ceci :

  1. Allez dans votre navigateur sur la page https://fr.wikipedia.org/wiki/Ꝃ, copiez l’URL, et lancez le raccourci (soit en sélectionnant le nom choisi, comme EncodeURL dans le menu raccourci symbolisé par deux losanges empilées), soit avec le raccourci clavier.
  2. Dans le champ qui vous invite à entrer l’URL à encoder, collez l’URL copiée précédemment puis validez
  3. L’URL encodée (dans le cas présent, https://fr.wikipedia.org/wiki/%EA%9D%82) se trouve dans votre presse-papier.

Il vous suffira alors d’entrer dans votre document \href{https://fr.wikipedia.org/wiki/%EA%9D%82}{https://fr.wikipedia.org/wiki/Ꝃ} pour obtenir ce que vous souhaitiez.

Si vous n’avez pas un mac avec un OS récent, des sites comme https://www.urlencoder.io/ permettent de faire la même chose, mais vous vous retrouvez avec une URL un peu trop encodée, si je puis m’exprimer ainsi : `https%3A%2F%2Ffr.wikipedia.org%2Fwiki%2F%EA%9D%82

Dans certains cas, vous pouvez employer une méthode plus simple, du moins dans le cas de certaines pages Wikipédia qui comportent des variantes sur le nom des articles, et si l’on sait que l’accent « é » s’encode par %C3%A9 (voir ma remarque quasiment à la fin de ce mail).

Dans le cas de l’article https://fr.wikipedia.org/wiki/Ꝃ il se trouve que l’article dispose d’un titre alternatif, qui permet d’accéder à l’article en question sans avoir à entrer le caractère spécial Ꝃ, et ce titre alternatif peut se deviner avec l’introduction de l’article, qui le mentionne. Il y est dit que Ꝃ se nomme « k barré diagonalement », et si l’on entre dans le champ de recherche Wikipédia « k barré diagonalement », on tombe sur la même page mais avec cette fois l’indication « (Redirigé depuis K barré diagonalement) ». En cliquant sur le lien mis en valeur, on tombe sur « https://fr.wikipedia.org/w/index.php?title=K_barré_diagonalement&redirect=no ».

Vous avez donc l’adresse alternative (récupérez le titre de l’article, supprimez « &redirect=no » et vous obtenez en recomposant : « https://fr.wikipedia.org/wiki/K_barré_diagonalement ». En remplaçant l’accent « é » par son encodage %C3%A9, on obtient : « https://fr.wikipedia.org/wiki/K_barr%C3%A9_diagonalement ».

Au final, avec \href{https://fr.wikipedia.org/wiki/K_barr%C3%A9_diagonalement}{https://fr.wikipedia.org/wiki/Ꝃ}, vous obtenez ce que vous souhaitez (vous conservez le bon affichage sur le document).

Les accents les plus courants en français :

é : %C3%A9
è : %C3%A8
à : %C3%A0

Vous en trouverez d’autres (dont les majuscules accentuées) dans le tableau situé sur la page https://www.w3schools.com/tags/ref_urlencode.asp (en considérant la colonne « From UTF-8 »). Sur Mac, vous pouvez aussi afficher le visualiseur de caractères (à activer le cas échéant dans les réglages du Mac) puis taper la caractère recherché dans le champ de recherche. Par exemple pour Ꝃ, on obtient comme code UTF8 : EA 9D 82. Il suffira de précéder du symbole % chaque octet pour obtenir : %EA%9D%82.

Désolé pour cette réponse très orientée Mac, ce qui conviendra à Jacques, mais pas forcément aux utilisateurs sous d’autres systèmes.

Le 9 nov. 2023 à 23:05, quark67 xyz@xyz.tld a écrit :
Par exemple pour Ꝃ, on obtient comme code UTF8 : EA 9D 82. Il suffira de précéder du symbole % chaque octet pour obtenir : %EA%9D%82

Merci à tous pour vos réponses à ce sujet…
Dommage que la macro \url ne fasse pas elle même ce travail de décodage!

J.A.

Le 13/11/2023 à 14:27, Jacques André a écrit :

Le 9 nov. 2023 à 23:05, quark67 xyz@xyz.tld a écrit :

Par exemple pour Ꝃ, on obtient comme code UTF8 : EA 9D 82. Il suffira de précéder du symbole % chaque octet pour obtenir : %EA%9D%82

Merci à tous pour vos réponses à ce sujet… Dommage que la macro \url ne fasse pas elle même ce travail de décodage!

C’est parce que rien ne garantit (dans les RFC qui décrivent les URI/URL) que c’est l’encodage UTF-8 qui est utilisé. Un véritable URI/URL n’utilise que de l’ASCII… et c’est le serveur qui choisit comment il souhaite interpréter les séquences %XX.

D’ailleurs, si dans un fichier PDF, le texte suivant:

https://fr.wikipedia.org/wiki/Ꝃ

envoie vers l’URL:

https://fr.wikipedia.org/wiki/%EA%9D%82

ça semble correct… Mais si quelqu’un imprime ce document, comment peut-il retrouver l’URL à utiliser. La plupart du temps, il ne sait même pas comment saisir le caractère Ꝃ dans la barre d’adresse de son navigateur !

Cordialement,
--
  Paul Gaborit

Quid d’un paramètre style urlencodibg= dans
Usepackage ?
JA

Le 14 nov. 2023 à 00:05, Paul Gaborit xyz@xyz.tld a écrit :

Le 13/11/2023 à 14:27, Jacques André a écrit :

Le 9 nov. 2023 à 23:05, quark67 xyz@xyz.tld a écrit :

Par exemple pour Ꝃ, on obtient comme code UTF8 : EA 9D 82. Il suffira de précéder du symbole % chaque octet pour obtenir : %EA%9D%82

Merci à tous pour vos réponses à ce sujet… Dommage que la macro \url ne fasse pas elle même ce travail de décodage!

C’est parce que rien ne garantit (dans les RFC qui décrivent les URI/URL) que c’est l’encodage UTF-8 qui est utilisé. Un véritable URI/URL n’utilise que de l’ASCII… et c’est le serveur qui choisit comment il souhaite interpréter les séquences %XX.

D’ailleurs, si dans un fichier PDF, le texte suivant:

https://fr.wikipedia.org/wiki/Ꝃ

envoie vers l’URL:

https://fr.wikipedia.org/wiki/%EA%9D%82

ça semble correct… Mais si quelqu’un imprime ce document, comment peut-il retrouver l’URL à utiliser. La plupart du temps, il ne sait même pas comment saisir le caractère Ꝃ dans la barre d’adresse de son navigateur !

Cordialement,
--
  Paul Gaborit