¿Qué caracteres permitían los nombres de archivo en Android?

¿Qué caracteres especiales están permitidos para los nombres de archivos en Android?

~!@#$%^&*()_+/\., 

Además, ¿puedo guardar el archivo con el nombre Unicode?

  1. En Android (al menos de forma predeterminada) los nombres de los archivos codificados como UTF-8.

  2. Parece que los caracteres reservados del nombre de archivo dependen del sistema de archivos montado ( http://en.wikipedia.org/wiki/Filename ).

Considerado como reservado:

 private static final String ReservedChars = "|\\?*<\":>+[]/'"; 

De acuerdo con wiki y suponiendo que está utilizando almacenamiento de datos externo que tiene FAT32.

Caracteres permitidos en las entradas de directorio

son

Cualquier byte excepto los valores 0-31, 127 (DEL) y: “* /: <>? \ | +,.; = [] (Lowcase az se almacenan como AZ). Con VFAT LFN cualquier Unicode excepto NUL

 final String[] ReservedChars = {"|", "\\", "?", "*", "<", "\"", ":", ">"}; for(String c :ReservedChars){ System.out.println(dd.indexOf(c)); dd.indexOf(c); } 

Este es el InputFilter correcto para los nombres de archivo en Android:

  InputFilter filter = new InputFilter() { public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { if (source.length() < 1) return null; char last = source.charAt(source.length() - 1); String reservedChars = "?:\"*|/\\<>"; if(reservedChars.indexOf(last) > -1) return source.subSequence(0, source.length() - 1); return null; } }; 

Probé esto rápidamente en mi Galaxy Note 8 en Android 4.4.2. La aplicación My Files predeterminada atenúa los caracteres no válidos que son los siguientes:

? : “* | / \ <>

Puse todos los otros caracteres especiales disponibles en un nombre de archivo y se guardó. Es posible que esto no sea coherente en todas las versiones de Android, así que tal vez lo mejor sea ser conservador y reemplazarlo por caracteres con significado similar.

Esto es claramente el sistema de archivos y el sistema operativo Android dependiente. En mi oneplus / oxygenOS, los únicos caracteres en la respuesta aceptada

 private static final String ReservedChars = "|\\?*<\":>+[]/'"; 

que no pude usar para cambiar el nombre de un archivo fueron / y *

Sin embargo, Android de ancho, la lista anterior parece ser sensata.