En raison de nombreux échanges de fichiers entre Windows ( encodage GBK ) et Linux ( encodage UTF-8 ), il rencontrera facilement des problèmes d'encodage de caractères, tels que:
- fichiers zip / tar dont le nom contient des caractères chinois sur le système Windows, décompressez / décompressez-le dans le système Linux.
- exécuter l'application Web Java héritée migrée (conçue sur le système Windows, en utilisant le codage GBK dans JSP) qui écrit les fichiers nommés par codage GBK sur le disque.
- ftp récupère / place les fichiers nommés par encodage GBK entre le serveur FTP Windows et le client Linux.
- changer l'environnement LANG sous Linux.
Le problème commun des précédents mentionnés est la localisation / la dénomination des fichiers. Après avoir recherché sur Google, j'ai reçu un article sur l' utilisation d'Unicode sous Linux http://www.linux.com/archive/feed/39912 , qui disait:
le système d'exploitation et de nombreux utilitaires ne réalisent pas quels caractères les octets des noms de fichiers représentent.
Ainsi, il est possible d'avoir 2 fichiers 中文 .txt avec un encodage différent:
[root@fedora test]# ls
???? 中文
[root@fedora test]# ls | iconv -f GBK
中文
涓iconv: illegal input sequence at position 7
[root@fedora test]# ls 中文 && ls $'\xd6\xd0\xce\xc4'|iconv -f gbk
中文
中文
Des questions:
- Est-il possible de configurer le système de fichiers linux en utilisant un codage de caractères fixe (comme NTFS utilise UTF-16 en interne) pour stocker les noms de fichiers indépendamment de l'environnement LANG / LC_ALL?
- Ou, ce que je veux vraiment demander, c'est: est-il possible de laisser le nom de fichier 中文 .txt (
$'\xe4\xb8\xad\xe6\x96\x87.txt'
) dans l'environnement zh_CN.UTF-8 et le nom de fichier 中文 .txt ($'\xd6\xd0\xce\xc4.txt'
) dans l'environnement zh_CN.GBK faire référence au même fichier ? - Si ce n'est pas configurable, est-il possible de patcher le noyau pour traduire le codage des caractères entre le système de fichiers et l'environnement actuel (juste une question, pas de demande d'implémentation)? et combien de con performance si c'est possible?