Estoy tratando con código que hace varias operaciones de IO con archivos, y quiero que sea capaz de manejar nombres de archivos internacionales. Estoy trabajando en una Mac con Java 1.5, y si un nombre de archivo contiene caracteres Unicode que requieren sustitutos, la JVM parece no poder ubicar el archivo. Por ejemplo, mi archivo de prueba es:Java no puede abrir un archivo con valores Unicode subrogantes en el nombre de archivo?
"草鷗外.gif"
que consigue roto en los caracteres Java \u8349\uD85B\uDFF6\u9DD7\u5916.gif
Si se crea un archivo de este nombre de archivo, no puedo abrirlo porque me sale una excepción FileNotFound. Incluso el uso de este en la carpeta que contiene el archivo fallará:
File[] files = folder.listFiles();
for (File file : files) {
if (!file.exists()) {
System.out.println("Failed to find File"); //Fails on the surrogate filename
}
}
La mayor parte del código que estoy realmente tratando son de la forma:
FileInputStream instream = new FileInputStream(new File("草鷗外.gif"));
// operations follow
¿Hay alguna manera de que pueda hacer frente a este problema, ¿escapando de los nombres de archivo o abriendo archivos de manera diferente?
¿Cuál es el valor de Charset.defaultCharset() en su entorno? –
(Desafortunadamente, StackOverflow también tiene un problema con los sustitutos, y ha quitado el ideograma U + 26FF6 de la pregunta) – bobince
¿Puede proporcionar lo que System.getProperty ("file.encoding") devuelve? Intente cambiar su codificación java -dfile.encoding = ENCODING_GOES_HERE si no funciona ni cambia la configuración regional de su sistema. Si esto tampoco funciona o esperamos, esperaremos que un experto lo resuelva. – JCasso