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.
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.