Je fais affaire avec du code qui effectue diverses opérations d'E/S avec des fichiers, et je veux le rendre capable de traiter des noms de fichiers internationaux. Je travaille sur un Mac avec Java 1.5, et si un nom de fichier contient des caractères Unicode qui nécessitent des substituts, la JVM n'arrive pas à localiser le fichier. Par exemple, mon fichier de test est:Java ne peut pas ouvrir un fichier avec des valeurs Unicode de substitution dans le nom de fichier?
"草鷗外.gif"
qui se casse dans les caractères Java \u8349\uD85B\uDFF6\u9DD7\u5916.gif
Si je crée un fichier de ce nom, je ne peux pas l'ouvrir parce que je reçois une exception FileNotFound. Même en utilisant ce sur le dossier contenant le fichier échouera:
File[] files = folder.listFiles();
for (File file : files) {
if (!file.exists()) {
System.out.println("Failed to find File"); //Fails on the surrogate filename
}
}
La plupart du code que je suis en fait affaire sont de la forme:
FileInputStream instream = new FileInputStream(new File("草鷗外.gif"));
// operations follow
Est-il possible que je peux résoudre ce problème, soit échapper les noms de fichiers ou ouvrir des fichiers différemment?
Quelle est la valeur de Charset.defaultCharset() dans votre environnement? –
(Malheureusement, StackOverflow a aussi un problème avec les substituts, et a supprimé l'idéogramme U + 26FF6 de la question) – bobince
Pouvez-vous fournir ce que System.getProperty ("file.encoding") renvoie? Essayez de changer votre encodage java -dfile.encoding = ENCODING_GOES_HERE si cela ne change pas les paramètres régionaux de votre système. Si cela ne fonctionne pas, nous attendrons qu'un expert le résolve. – JCasso