it-swarm.com.de

Problem mit der Dateinamenkodierung

Ich erhalte eine Datei mit einem färöischen Namen und versuche, sie in einem PHP Skript zu speichern:

2010_08_Útflutningur.xls

In Ubuntu 10.04 speichert LTS es als:

2010_08_�tflutningur.xls (invalid encoding)

Ich habe utf8-migration-tool Installiert und ausgeführt, aber ohne Wirkung.

Ist das ein Ubuntu-Fehler, den ich beheben kann oder muss ich einfach aufgeben und den Namen in PHP ändern?

Gibt es ein Dokument, das angibt, was der akzeptable Zeichensatz für einen Dateinamen in Ubuntu ist, oder welche Codierungsspezifikationen gibt es?

Vielen Dank

9
Elzo Valugi

Dies scheint ein Codierungsproblem zu sein. Leider benötigt PHP ein wenig Handarbeit, wenn es um Codierungen geht, da die Zeichenfolgen standardmäßig aus Einzelbytes bestehen. Wenn Sie den Dateinamen in PHP erstellen, müssen Sie utf8_encode() sollte hilfreich sein, beachte jedoch, dass für die Eingabe die ISO-8859-1-Codierung angenommen wird.

Wenn Sie dagegen den von einem Client übermittelten Dateinamen verwenden, können Sie den Client möglicherweise auffordern, die Codierung für Sie vorzunehmen. Dies geschieht mit dem accept-charset Attribut des <form> -Tag und/oder durch Festlegen des Zeichensatzes der Seite, auf der sich das Formular befindet. Bestimmte Clients können den einen oder anderen verwenden, daher sollten Sie für optimale Ergebnisse jeweils UTF-8 verwenden.

5
eswald

Standardmäßig verwendet Ubuntu UTF-8 für Dateinamen. Die meisten modernen Linux-Distributionen und viele andere Betriebssysteme tun dies (Windows/NTFS ist die bekannteste Ausnahme bei UTF-16).

Um Dateien zu reparieren, deren Namen in der falschen Codierung angegeben sind, können Sie versuchen, nautilus-filename-repairer Zu verwenden.

Sudo apt-get install nautilus-filename-repairer

Sie können die PHP iconv -Funktionen verwenden, um Zeichenfolgen (Dateinamen) von einer Codierung in die andere zu konvertieren. Dazu müssen Sie natürlich wissen, welche Codierung Sie verwenden sie sind zu Beginn drin.

Um korrekt codierte Dateinamen vom Client zu erhalten, können Sie die von eswald erläuterte Technik ausprobieren.

7
JanC