Quels caractères spéciaux sont autorisés pour les noms de fichiers sur Android?
~!@#$%^&*()_+/\.,
Aussi, puis-je sauvegarder un fichier avec un nom Unicode?
Sur Android (au moins par défaut), les noms de fichier codés au format UTF-8.
On dirait que les caractères de nom de fichier réservés dépendent du système de fichiers monté ( http://en.wikipedia.org/wiki/Filename ).
J'ai considéré comme réservé:
private static final String ReservedChars = "|\\?*<\":>+[]/'";
Selon wiki et en supposant que vous utilisez un stockage de données externe avec FAT32.
Caractères autorisés dans les entrées de répertoire
sont
N'importe quel octet, à l'exception des valeurs 0 à 31, 127 (DEL) et: "* /: <>?\| +,.; = [] (Les minuscules a-z sont stockés sous la forme A-Z). Avec VFAT LFN, tout Unicode sauf NUL
final String[] ReservedChars = {"|", "\\", "?", "*", "<", "\"", ":", ">"};
for(String c :ReservedChars){
System.out.println(dd.indexOf(c));
dd.indexOf(c);
}
Ceci est correct InputFilter pour les noms de fichiers sous 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;
}
};
J'ai testé cela rapidement sur mon Galaxy Note 8 sur Android 4.4.2. L'application par défaut Mes fichiers supprime utilement les caractères non valides, comme suit:
? : "* |/\ <>
Je mets tous les autres caractères spéciaux disponibles dans un nom de fichier et celui-ci est enregistré. Cela peut ne pas être uniforme dans toutes les versions d'Android, alors il vaut peut-être mieux rester prudent et les remplacer par des caractères similaires.
Cela dépend clairement du système de fichiers et du système d’exploitation Android. Sur oneplus/oxygenOS, les seuls caractères de la réponse acceptée
private static final String ReservedChars = "|\\?*<\":>+[]/'";
que je ne pouvais pas utiliser pour renommer un fichier étaient/et *
Cependant, au niveau Android, la liste ci-dessus semble être judicieuse.