Estoy ejecutando una pequeña aplicación Java en una plataforma Linux incorporada. Después de reemplazar Java VM JamVM con OpenJDK, los nombres de archivo con caracteres especiales no se almacenan correctamente. Los caracteres especiales como diéresis se reemplazan por signos de interrogación.Codificación de nombres de archivos en Java
Aquí está mi código de prueba:
import java.io.File;
import java.io.IOException;
public class FilenameEncoding
{
public static void main (String[] args) {
String name = "umlaute-äöü";
System.out.println("\nname = " + name);
System.out.print("name in Bytes: ");
for (byte b : name.getBytes()) {
System.out.print(Integer.toHexString(b & 255) + " ");
}
System.out.println();
try {
File f = new File(name);
f.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Correr da el siguiente resultado:
name = umlaute-???
name in Bytes: 75 6d 6c 61 75 74 65 2d 3f 3f 3f
y archivo llamado Umlaute - ??? es creado.
Al establecer las propiedades file.encoding y sun.jnu.encoding en UTF-8 se obtienen las cadenas correctas en el terminal, pero el archivo creado sigue siendo umlaute - ???
Ejecución de la máquina virtual con strace, puedo ver la llamada al sistema
open("umlaute-???", O_RDWR|O_CREAT|O_EXCL|O_LARGEFILE, 0666) = 4
Esto demuestra, que el problema no es un problema del sistema de archivos, pero una de las VM.
¿Cómo se puede establecer la codificación del nombre del archivo?
por favor, vaya a través del enlace que explica establecer la codificación .. http://stackoverflow.com/questio ns/361975/setting-the-default-java-character-encoding – Phani
Establecer file.encoding no ayuda. Solo afecta el contenido del archivo, pero no el nombre del archivo. –
Esto podría ayudarlo un poco ... http://stackoverflow.com/questions/1184176/how-can-i-safely-encode-a-string-in-java-to-use-as-a-filename – Phani