[LINUX] Le nom de fichier japonais est déformé lors de la définition de la variable d'environnement LANG lors de l'exécution du programme Java sur le conteneur Docker

Aperçu

Lorsque j'exécutais un programme Java sur le conteneur CentOS Docker, un mystérieux caractère déformé s'est produit lorsque j'ai obtenu une liste de fichiers contenant des noms de fichiers japonais.

Sample.java


import java.io.*;

public class Sample {
   public static void main(String[] args) {
      //Le nom du fichier est un fichier japonais "/sample/AIUEO.Placer "csv"
      new File("/sample").listFiles(new FilenameFilter() {
         public boolean accept(File dir, String name) {
            System.out.println(name);   // =>Le nom de fichier japonais est déformé lors de l'obtention de la liste de fichiers
            return false;
         }
      });
   }
}

En passant, il a été confirmé que les caractères déformés ne se produisent pas lorsque la variable d'environnement LANG est définie sur ʻen_US.UTF-8, et que les caractères déformés se produisent lorsque la variable d'environnement LANG est définie sur ja_JP.UTF-8`.

Cet article décrit les causes des caractères déformés dans les noms de fichiers japonais et comment les traiter.

Cause et remède

Tout d'abord, définir ja_JP.UTF-8 dans la variable d'environnement LANG provoque des caractères déformés, car les paramètres régionaux japonais ne sont pas enregistrés dans l'image ** CentOS de Docker **.

Vous pouvez vérifier les paramètres régionaux qui peuvent être spécifiés dans la variable d'environnement LANG avec la commande locale -a. Essayez d'exécuter la commande dans le conteneur de l'image CentOS pour vérifier.

# locale -a
C
POSIX
en_US.utf8

Comme mentionné ci-dessus, les paramètres régionaux japonais ne sont pas inclus dans le conteneur d'images Docker CentOS. Si vous essayez d'obtenir la liste de fichiers à partir d'un programme Java en spécifiant la variable d'environnement LANG comme indiqué ci-dessous dans ce conteneur, le nom de fichier japonais sera déformé.

LANG=ja_JP.UTF-8
export LANG

java Sample
=>Nom de fichier japonais déformé.csv

Pour contourner le problème, utilisez la commande localedef pour ** ajouter un paramètre régional japonais ** afin d'éliminer les caractères déformés. Ajoutez la commande suivante en tant que commande RUN dans le Dockerfile ou exécutez-la dans le conteneur.

# localedef -f UTF-8 -i ja_JP ja_JP.UTF-8

Vérifiez à nouveau les paramètres régionaux qui peuvent être spécifiés avec la commande locale -a.

# locale -a
C
POSIX
en_US.utf8
ja_JP.utf8

La commande localedef a été ajoutée ja_JP.utf8. Désormais, même si vous définissez la variable d'environnement LANG, vous pouvez gérer les noms de fichiers japonais sans caractères déformés.

Conclusion

Recommended Posts

Le nom de fichier japonais est déformé lors de la définition de la variable d'environnement LANG lors de l'exécution du programme Java sur le conteneur Docker
Démarrez le conteneur Docker lors de l'exécution de Pytest