Ho a che fare con il codice che esegue varie operazioni di I/O con i file e voglio renderlo in grado di gestire i nomi di file internazionali. Sto lavorando su un Mac con Java 1.5 e se un nome file contiene caratteri Unicode che richiedono surrogati, la JVM non sembra in grado di individuare il file. Ad esempio, il mio file di prova è:Java non può aprire un file con valori Unicode surrogati nel nome file?
"草鷗外.gif"
che viene suddiviso in personaggi Java \u8349\uD85B\uDFF6\u9DD7\u5916.gif
Se creo un file da questo nome, non posso aprirlo perché ho un'eccezione FileNotFound. Anche usando questo sulla cartella contenente il file fallirà:
File[] files = folder.listFiles();
for (File file : files) {
if (!file.exists()) {
System.out.println("Failed to find File"); //Fails on the surrogate filename
}
}
La maggior parte del codice che sto effettivamente a che fare con sono di forma:
FileInputStream instream = new FileInputStream(new File("草鷗外.gif"));
// operations follow
C'è qualche modo per affrontare questo problema, sfuggire ai nomi dei file o aprire file in modo diverso?
Qual è il valore di Charset.defaultCharset() nel proprio ambiente? –
(Sfortunatamente, StackOverflow ha anche un problema con i surrogati e ha rimosso l'ideogramma U + 26FF6 dalla domanda) – bobince
Puoi fornire cosa restituisce System.getProperty ("file.encoding")? Prova a cambiare la tua codifica java -dfile.encoding = ENCODING_GOES_HERE se non funziona o cambia le impostazioni locali del tuo sistema. Se anche questo non funziona, aspetteremo un esperto per risolverlo. – JCasso