{{tag>sysadmin linux charset encodage encoding}}
====== Encodage des caractères ======
Par son mode de fonctionnement, un ordinateur ne permet que de stocker des représentations binaires (des nombres en base 2). Il n'y a donc pas de façon "naturelle" de représenter un caractère comme 'A', un guillemet ou un point-virgule, il faut donc **concevoir des abstractions** basées sur ces nombres pour représenter d’autres données. Un **jeu de caractère** est une table permettant d'établir un **transcodage** entre une valeur binaire et un symbole, un caractère. C'est donc un choix, **une convention** et **plusieurs jeux de caractères existent** comme US-ASCII, CP1252, ISO 8859-1 (Latin-1), ISO 8859-15 (Latin-9), UTF-8 etc.
Pour représenter un caractère à l’écran il faut donc:
- décoder le flux d'octets pour associer le code binaire à un symbole, c'est le rôle du jeu de caractères.
- Afficher un symbole, c'est à dire dessiner le glyphe correspondant au symbole c'est le rôle de la police de caractères.
Les éditeurs de textes permettent de définir quel jeu de caractères (charset) doit être utilisé pour l'édition et l'enregistrement d'un fichier texte.
===== Déterminer le charset d'un fichier =====
Plusieurs outils peuvent être utilisés: uchardet, file, enca
# Détermine le type mime et l'encodage du fichier smp2.csv
file --mime smp2.csv
smp2.csv: application/csv; charset=us-ascii
# Pour n'afficher que l'encodage
file --brief --mime-encoding smp2.csv
us-ascii
# Déterminer l'encodage via chardet
chardet smp2.csv
smp2.csv: ascii with confidence 1.0
===== Conversion =====
Depuis la ligne de commande via **iconv**:
# Créer un
iconv --from-code=US-ASCII --to-code=UTF-8 --output=smp3.csv smp2.csv
Certains jeux de caractères sont plus étendus que d'autres. Par exemple UTF-8 contient des caractères qui ne pourront pas être convertis en ASCII. **iconv** génère alors un message d'erreur de la forme ''illegal input sequence at position'' a moins de définir l'option **-c** permettant d'ignorer les caractères non convertibles.
Les éditeurs de textes permettent de définir quel encodage utiliser lors de l'enregistrement. Vim par exemple dispose de la variable [[software:applications:vim:trucs-et-astuces#encodage|fileencoding]].
===== Références =====
* https://stackoverflow.com/questions/48729215/how-to-check-character-encoding-of-a-file-in-linux
* https://www.shellhacks.com/linux-check-change-file-encoding/