Linux interpretiert keine UTF8-codierten Zeichen

7

Adán-y-Eva-50x50.jpgWenn ich also die folgende Datei habe, wenn ich versuche, darauf zuzugreifen, übersetzt Apache sie in Ad\xc3\xa1n-y-Eva-50x50.jpgund findet sie nicht, obwohl sie existiert.

Dies geschieht nur für Dateinamen, die UTF8-Zeichen enthalten.

Ich habe bereits die folgende Konfiguration in meinem /etc/httpd/conf/httpd.conf

...
AddDefaultCharset UTF-8
...
IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable +Charset=UTF-8
...

Und auch dies zu meiner Wurzel .htaccessin der ersten Zeile hinzugefügt :

IndexOptions +Charset=UTF-8

All dies ohne Auswirkung auf das Laden dieser Art von Dateien. Irgendwelche Vorschläge?

AKTUALISIEREN

Um es nur zu erwähnen: Ich führe die Websites auf einem CentOS-Server mit vorkonfiguriertem plesk panel aus

w0rldart
quelle
3
Die Optionen, die Sie auflisten, dienen dazu, Hinweise auf den Zeichentyp im Inhalt der Seiten zu geben, und nicht auf die URL, die das von Ihnen beschriebene Problem darstellt. Probleme beim Codieren der URL können auf den Browser und nicht auf Apache zurückzuführen sein. Es funktionierte gut für mich mit Apache 2.2.3 auf Centos5 mit LANG = en_US.UTF8
Mtinberg
Ich bin geneigt, mtinberg zuzustimmen, aber können Sie für alle Fälle näher erläutern, was Sie unter "Apache übersetzt es" verstehen? Befindet sich dies in der URL-Leiste des Browsers oder in einer Protokolldatei? Haben Sie versucht , die Index - Seite von der Konsole greifen (vorausgesetzt , Sie haben einen UTF-8 - fähigen Variable LANG und Terminal) mit wgetoder curlzu überprüfen, ob das ist in der Tat , was der Webserver selbst sendet?
Andrew B
Welchen Browser verwenden Sie und für welche Sprache / welchen Zeichensatz der Browser konfiguriert ist, siehe: Fehler: Apache 2.0 unterbricht nicht UTF-8-codierte URLs unter Windows
arober11
1
passiert auf Chrome, Firefox und Safari ... es ist kein Browser-Problem, da auf dem älteren Server kein Problem mit dem erwähnten
w0rldart
Für diejenigen, die ein ähnliches Problem nicht durch Antworten unten lösen können. Überprüfen Sie Ihre UTF8-Dateinamen auf NORMALISIERUNGSFORMULAR (C, D). Wenn Sie beispielsweise Dateien von einem Mac do Linux mit UTF * -Namen übertragen, ist dies möglicherweise nicht für eine neue Umgebung geeignet. Kann von convmv mit dem Flag --nfc geändert werden.
Michal S

Antworten:

11

Das Problem hier scheint weder in Ihrem Browser noch in Ihrer Apache-Konfiguration zu liegen. Sie müssen die Gebietsschemaeinstellungen Ihres Systems überprüfen.

Sie müssen überprüfen, ob das Gebietsschema Apache ausgeführt wird und UTF-8 aktiviert ist. Dazu können Sie den folgenden Befehl ausführen:

$ sudo su -l -c locale www-data

Wo www-dataist der Apache-Benutzer? Überprüfen Sie, ob das zurückgegebene Gebietsschema nicht so aussieht. es_ES.UTF-8Dies bedeutet beispielsweise, dass in Ihrem Gebietsschema UTF-8 nicht aktiviert ist.

In diesem Fall können Sie diese Konfiguration auf einem CentOS-Computer /etc/sysconfig/i18nunter ändern und die Leitung LANG="es_ES"in ändern LANG="es_ES.UTF-8". Damit dies funktioniert, benötigt Ihr System jedoch die Gebietsschemadatei für diese Sprache. Um zu überprüfen, ob es vorhanden ist, verwenden Sie locale -a, um eine Liste der verfügbaren Gebietsschemas abzurufen .

Wenn Ihr System kein UTF-8-fähiges Gebietsschema hat, können Sie eines mit dem folgenden Befehl generieren:

$ sudo localedef -i es_ES -f UTF-8 es_ES.utf8 

und legen Sie es als Standardsprache fest.

Ich hoffe das hilft!

fboaventura
quelle
1
versucht su -l -c locale apacheund su -l -c locale my-userund keiner gibt die gewünschte Ausgabe zurück. Ich lief auch system-config-languageund stellte auf spanische utf8, reboted und das gleiche ... auch eingestellt i18naufes_ES.UTF-8
w0rldart
Um die Gebietsschemadatei zu generieren, und dies wird global erfolgen, müssen Sie locale-gen es_ES.utf8als root ausgeführt werden.
Fboaventura
1
Ich laufe auf CentOS, ich habe locale-genund habe nicht gesucht und alle haben darauf hingewiesensystem-config-language
w0rldart
Ich habe den Befehl geändert, um die Gebietsschemadatei zu generieren. Nach der Generierung der Datei können Sie die i18nDatei in sysconfig ändern, Ihren Apache neu starten (oder Ihr System neu starten) und der Test ist beendet.
Fboaventura
1
Ich habe immer das gleiche Problem ... und su -l -c locale site-user
gebe
1

Neben der Antwort von fboaventura

Überprüfen Sie, ob das Gebietsschema Apache ausgeführt wird

$ sudo su -l -c locale www-data

So ändern Sie die i18nKonfiguration unter /etc/sysconfig/i18n:

Wechseln Sie in das CentOS-Systemkonfigurationsverzeichnis

$ cd /etc/sysconfig

Erstellen Sie eine Sicherungskopie Ihrer Spracheinstellungsdatei

$ cp i18n i18n.backup

Bearbeiten Sie die Spracheinstellungsdatei mit nano

$ nano i18n

Bearbeiten Sie die Datei so, dass sie Ihre Konfiguration enthält

Zum Beispiel:

LANG="en_US.utf8"
SYSFONT="latarcyrheb-sun16"
SUPPORTED="en_US.utf8:en_US:en:fr_FR.utf8:fr_FR:fr :es_ES.utf8:es_ES:es:de_DE.utf8:de_DE:de:sv_SE.utf 8:sv_SE:sv:zh_CN.utf8:
zh_CN:zh:zh_TW.utf8:zh_TW:zh:ja_JP.utf8:ja_JP:ja:k o_KR.utf8:ko_KR:ko"

Speichern Sie die Datei und starten Sie das System neu.

Zusätzliche Ressourcen

RafaSashi
quelle