Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 28/07/2017, à 08:48

DonutMan75

Terminal et encodage Unicode/UTF-8

Bonjour à tous,
je cherchais comment entrer des commandes UTF-8 dans le shell et je suis tombé sur ce vieux fil de discussion qui m'a beaucoup aidé.
Néanmoins j'aurais trois petites questions supplémentaires à vous poser... ^^

1) Dans la ligne de commande de bash et à supposer que les séquences d'échappement soient interprétées :
\uXXXX est *toujours* interprété comme un caractère UNICODE
\xNN\xNNetc... est interprété comme une séquence d'octets, séquence qui *peut* s'interpréter comme un caractère UTF-8 si la localisation du système est correctement paramétrée.

J'ai bon ?

2) Quand je passe un argument à une commande, par défaut la chaîne de caractère n'est *pas* interprétée

Je dois forcer l'interprétation, par exemple via l'option -e de echo...

echo -e "\xe0\xa4\xaa"
प
$ echo -e "\u092a"
प

Ainsi, si je veux passer la chaîne "Nom:Jean-Rogerप" à mon programme toto je dois donc faire quelque chose comme :

$ echo -e "Nom:Jean-Roger\xe0\xa4\xaa" | xargs ./toto

Autre solution, si je suis en interactif et que je connais bien ma table UNICODE, ce serait de passer par le raccourci clavier Ctrl+Shift+u suivi de 092a

Jusque là j'ai bon ?

3) Enfin et pour terminer je ne comprends pas la syntaxe proposée par pingouinux

$ echo $'\u21a0'
↠
$ echo $'\xe2\x86\xa0'
↠

J'ai eu beau chercher sur le net, pas moyen de trouver à quoi correspond la notation $'xxx'
C'est une spécificité de bash ?

Merci d'avance pour vos retours !

Donut

Hors ligne

#2 Le 28/07/2017, à 08:59

pingouinux

Re : Terminal et encodage Unicode/UTF-8

Bonjour,
Pour la question n°3, regarde : man bash -> Rubrique QUOTING

Hors ligne

#3 Le 28/07/2017, à 10:02

DonutMan75

Re : Terminal et encodage Unicode/UTF-8

Hello pingouinux,
super, merci pour ta réponse !
J'avais cherché dans le man bash mais pas avec les bons mots clefs ^^

La réponse au point 3 :

man bash > /QUOTING a écrit :

Words of the form $'string' are treated specially.  The word expands to string, with backslash-escaped characters replaced as specified by the ANSI  C
       standard.  Backslash escape sequences, if present, are decoded as follows:
              \a     alert (bell)
              \b     backspace
              \e
              \E     an escape character
              \f     form feed
              \n     new line
              \r     carriage return
              \t     horizontal tab
              \v     vertical tab
              \\     backslash
              \'     single quote
              \"     double quote
              \nnn   the eight-bit character whose value is the octal value nnn (one to three digits)
              \xHH   the eight-bit character whose value is the hexadecimal value HH (one or two hex digits)
              \uHHHH the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHH (one to four hex digits)
              \UHHHHHHHH
                     the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHHHHHH (one to eight hex digits)
              \cx    a control-x character

       The expanded result is single-quoted, as if the dollar sign had not been present.

       A  double-quoted  string preceded by a dollar sign ($"string") will cause the string to be translated according to the current locale.  If the current
       locale is C or POSIX, the dollar sign is ignored.  If the string is translated and replaced, the replacement is double-quoted.

Hors ligne