Je reçois un fichier avec un nom faroese et j'essaie de le sauvegarder dans un script PHP:
2010_08_Útflutningur.xls
Dans Ubuntu 10.04, LTS l’enregistre en tant que:
2010_08_�tflutningur.xls (invalid encoding)
J'ai installé et exécuté utf8-migration-tool
, mais sans effet.
Est-ce une erreur Ubuntu que je peux réparer ou je dois juste abandonner et modifier le nom en php?
Existe-t-il un document indiquant quel est le jeu de caractères acceptable pour un nom de fichier dans Ubuntu ou quelles sont les spécifications d'encodage?
Merci
Cela ressemble à un problème d'encodage. Malheureusement, PHP a besoin d'un peu de main de main en matière d'encodage, car ses chaînes sont codées sur un octet par défaut. Si vous créez le nom de fichier dans PHP, utf8_encode()
devrait être utile; notez cependant que cela suppose un codage ISO-8859-1 pour l'entrée.
D'autre part, si vous utilisez le nom de fichier soumis par un client, vous pouvez peut-être demander au client de procéder à l'encodage pour vous. Cela est fait avec l'attribut accept-charset
de la balise _<form>
_ et/ou en définissant le jeu de caractères de la page sur laquelle se trouve le formulaire. Certains clients peuvent utiliser l’un ou l’autre. Pour obtenir les meilleurs résultats, utilisez UTF-8.
Par défaut, Ubuntu utilise UTF-8 pour les noms de fichiers. La plupart des distributions linux modernes et de nombreux autres systèmes d'exploitation le font (Windows/NTFS est l'exception la plus connue avec UTF-16).
Pour réparer les fichiers dont le nom est dans le mauvais codage, comme celui que vous affichez, vous pouvez utiliser nautilus-filename-repairer
Sudo apt-get install nautilus-filename-repairer
Vous pouvez utiliser les fonctions PHP iconv
pour convertir des chaînes (noms de fichiers) d'un encodage à l'autre. Bien sûr, cela nécessite que vous sachiez dans quel encodage ils se trouvent.
Pour obtenir des noms de fichiers correctement encodés à partir du client, vous pouvez essayer la technique décrite par eswald.