Outils pour utilisateurs

Outils du site


tech:caractere_speciaux_unicode_utf8

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
tech:caractere_speciaux_unicode_utf8 [2025/11/03 16:42] Jean-Baptistetech:caractere_speciaux_unicode_utf8 [2026/06/19 16:14] (Version actuelle) Jean-Baptiste
Ligne 1: Ligne 1:
 +<!DOCTYPE markdown>
 +{{tag>Encodage}}
 +
 +# Caractère spéciaux Unicode / UTF8
 +
 +Voir :
 +  * [[table_caractere_speciaux_unicode_utf8]]
 +  * [[sed_suppression_caracteres_non_ascii|Supprimer les caractères non imprimables]]
 +  * [[Pb encodage fichier ansible-lint yamllint]]
 +
 +Voir aussi :
 +  * `convmv`
 +  * `textconv`
 +  * `unaccent`
 +
 +
 +Sous ouindoze il suffit de maintenir la touche **Alt** puis de taper le code ASCII Étendu en décimal avec le pavé numérique. 
 +
 +Ce n'est pas sans faire rappeler "La Matrice" avec la fameuse Libcaca.
 +
 +Quand est-il sous GNU/Linux ?
 +
 +Ben, ça fait longtemps que la plupart des distributions sont en UTF-8, donc nous pouvons insérer des caractères Unicode.
 +
 +Voici comment :
 +
 +Maintenir simultanément enfoncés les touches `Ctrl + Shift + U`
 +
 +** Ne marche que sur les applications GTK **
 +
 +Puis tapez le numéro Unicode du symbole souhaité.
 +
 +Par exemple pour le symbole coché :
 +
 +`Ctrl + Shift + U` \
 +Puis 2713 \
 +Donne: ✓ 
 +
 +`Ctrl + Shift + U` \
 +Puis 2717 \
 +Donne : ✗
 +
 +Voir :
 +  * https://fr.wikipedia.org/wiki/Coche_%28typographie%29
 +  * https://en.wikipedia.org/wiki/Unicode_input
 +  * https://fr.wikipedia.org/wiki/Aide:Caract%C3%A8res_sp%C3%A9ciaux_probl%C3%A9matiques
 +  * http://michal.kosmulski.org/computing/articles/linux-unicode.html
 +
 +
 +## Pb
 +
 +### Pb si certains caractères unicode sous Debian ne sont pas afficher correctement
 +
 +Solution
 +~~~bash
 +apt-get install unifont
 +~~~
 +
 +### Avec l'interface graphique
 +
 +Sinon en outil graphique il existe [Gucharmap](http://doc.ubuntu-fr.org/gucharmap)
 +
 +~~~bash
 +apt-get install gucharmap
 +~~~
 +
 +
 +### Pb 'ascii' codec can't encode character
 +
 +Non 7-Bit ASCII
 +
 +~~~
 +ERROR keystone.common.wsgi UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 27: ordinal not in range(128)
 +~~~
 +
 +~~~bash
 +printf '\ue9' | grep -P '\xe9'
 +#grep '\\C3\\A9'
 +~~~
 +
 +
 +### Pb vim characters "[0m|"
 +
 +How to remove "**[0m|**" ? \\
 +Wrong locale
 +
 +Try 
 +~~~bash
 +env LC_ALL=en_US.UTF-8 vim README.md
 +# LC_ALL=C.UTF-8
 +~~~
 +
 +Ou
 +~~~bash
 +export LANG=en_US.UTF-8
 +export LANGUAGE=en_US:en
 +export LC_CTYPE="en_US.UTF-8"
 +export LC_NUMERIC="en_US.UTF-8"
 +export LC_TIME="en_US.UTF-8"
 +export LC_COLLATE="en_US.UTF-8"
 +export LC_MONETARY="en_US.UTF-8"
 +export LC_MESSAGES="en_US.UTF-8"
 +export LC_PAPER="en_US.UTF-8"
 +export LC_NAME="en_US.UTF-8"
 +export LC_ADDRESS="en_US.UTF-8"
 +export LC_TELEPHONE="en_US.UTF-8"
 +export LC_MEASUREMENT="en_US.UTF-8"
 +export LC_IDENTIFICATION="en_US.UTF-8"
 +export LC_ALL=
 +~~~
 +
 +
 +### Pb accent - grep ou diff
 +
 +Diff NOK lors de :
 +~~~bash
 +docker exec 171daa9d9f62 cat plop.txt > /tmp/plop.txt
 +diff /tmp/plop.txt <(docker exec 171daa9d9f62 cat plop.txt)
 +~~~
 +
 +Et grep message `binary file matches` alors qu'il s'agit bien d'un fichier texte.
 +
 +~~~
 +$ grep red /tmp/plop.txt
 +grep: /tmp/plop.txt: binary file matches
 +
 +$ file plop.txt
 +plop.txt: ISO-8859 text
 +
 +$ grep --text red /tmp/plop.txt | cat -A
 +## environnement redondM-i$
 +
 +$ grep --text red /tmp/plop.txt | grep red
 +grep: (standard input): binary file matches
 +
 +$ grep --text red /tmp/plop.txt | sed -e 's/\xe9//g' | grep red
 +## environnement redond
 +~~~
 +
 +Le caractère E9 est pourtant un caractère correcte en ASCII étendue
 +
 +
 +## Solution
 +
 +* Supprimer les caracères non ASCII
 +* Ou utiliser `unaccent`
 +
 +~~~code
 +unaccent ISO-8859-1 /tmp/plop.txt
 +~~~
 +
 +
 +## CRLF
 +
 +Voir aussi CRNL : Carriage return (to) newline
 +
 +https://docs.ansible.com/projects/ansible/latest/dev_guide/testing/sanity/line-endings.html
 +
 +All files must use `\n` for line endings instead of `\r\n`
 +
 +
 +
 +### Autres
 +
 +`/usr/bin/isutf8`
 +
 +~~~bash
 +mv App.ini.j2 App.ini.j2.bak
 +# iconv -f iso-8859-1 -t utf-8 App.ini.j2.bak > App.ini.j2
 +iconv -f iso-8859-15 -t utf-8 App.ini.j2.bak > App.ini.j2
 +
 +# convmv -f iso-8859-1 -t utf8 DIR
 +# convmv -f iso-8859-15 -t utf8 DIR
 +~~~
 +
 +Exemple
 +~~~
 +install.sh:4:22: invalid UTF-8 encoding
 +iconv -f iso-8859-15 -t utf-8 install.sh > install2.sh
 +~~~
 +
 +~~~bash
 +iconv -f utf-8 -t ascii//TRANSLIT README.md > README2.md
 +~~~
 +
 +
 +
 +#### Pb hGetContents: invalid argument (invalid byte sequence)
 +
 +~~~
 +$ shellcheck plop.sh
 +plop.sh: plop.sh: hGetContents: invalid argument (invalid byte sequence)
 +
 +$ file plop.sh
 +plop.sh:    Bourne-Again shell script, ISO-8859 text executable
 +
 +$ iconv -t utf-8 plop.sh > mkiso-debian3.sh
 +iconv: illegal input sequence at position 2582
 +
 +$ iconv -f iso-8859-1 -t utf-8 plop.sh > plop2.sh
 +~~~
 +
 +
 +~~~
 +$ file plop*
 +plop1.tcl: Unicode text, UTF-8 text, with CRLF line terminators
 +plop2.tcl: Unicode text, UTF-8 text
 +
 +
 +$ dos2unix plop1.tcl
 +$ dos2unix plop2.tcl
 +$ file plop*
 +plop1.tcl:                      ISO-8859 text
 +plop2.tcl: ISO-8859 text
 +~~~
 +
 +~~~bash
 +diff <(cat -A plop.yml) <(cat plop.yml | sed -e 's/$/$/g' )
 +~~~
 +
 +
 +## Autres
 +
 +
 +Source : https://www.reddit.com/r/git/comments/r8xbbs/nonutf8_file_and_commit_verbose_messing_up_the/?tl=fr
 +
 +### Idée #1
 +
 +Adoptez une approche radicalement différente : modifiez le fichier en UTF-8, suivez-le dans Git en UTF-8, mais demandez à votre outil de build de le convertir en ISO-8859-1 afin que la machine Windows puisse l'utiliser.
 +
 +Unicode contient tous les caractères ISO-8859-1 en tant que points de code : 
 +https://en.wikipedia.org/wiki/ISO/IEC_8859-1
 +
 + Je pense que cela signifie que tous les caractères ISO-8859-1 ont un équivalent exact en Unicode, vous devriez donc pouvoir représenter parfaitement les fichiers ISO-8859-1.
 +
 +Cela suppose que vous n'utilisez pas un outil Windows pour le modifier, mais si c'est le cas, vous pouvez effectuer une conversion bidirectionnelle. Et cela suppose également que vous avez un outil de build et qu'il peut gérer cela
 +
 +### Idée #2
 +
 +Configurez des filtres smudge et clean https://git-scm.com/docs/gitattributes#_filter (pour ce fichier) pour convertir UTF-8 en ISO-8859-1 lors du checkout et vice versa lors de la mise en scène/validation. Maintenant, votre copie de travail est en ISO-8859-1, mais Git la suit en UTF-8. C'est plus automatique, mais peut-être un peu plus sujet aux erreurs car (je pense) il doit être correctement configuré dans chaque référentiel. De plus, le fait que cela résolve réellement votre problème dépendrait de la façon dont git diff fonctionne avec les filtres. Si tout est nettoyé (en UTF-8 dans votre cas) avant la comparaison, il semble que cela résoudrait ce problème. 
 +
 +
 +
  

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki