
Ich habe ein Problem, wenn ich eine Datei von Server A (Debian 7.4) auf Server B (Debian 7.4) kopiere. Polnische Sonderzeichen in Dateien werden auf Server B (in mcedit) nicht richtig angezeigt.
Ich habe auf Server A eine Datei mit polnischen Sonderzeichen erstellt. Sie wird auf Server A korrekt angezeigt. Beim Ausführen locale
auf Server A erhalte ich LANG=pl_PL.UTF-8
Andere Variablen außer LANGUAGE
und LC=ALL
sind ebenfalls auf gesetzt pl_PL.UTF-8
. Dann tarne ich die Datei und lade die getarnte Datei auf Server BI mit dem Befehl wget herunter. Auf Server BI entpacke ich die Datei und wenn ich mir den Dateiinhalt ansehe (mcedit), werden polnische Buchstaben falsch angezeigt. Anstelle von Sonderzeichen sind „Rauten“ zu sehen. Beim Ausführen locale
auf Server B wird angezeigt LANG=en_US.UTF-8
. Andere Variablen außer LANGUAGE
und LC=ALL
sind ebenfalls auf gesetzt en_US.UTF-8
.
Dann führe ich Datenbankmigrationen aus (PHP-Skript) und beschädigte Daten werden in die Datenbank eingefügt. Wenn ich bei der Migration Zeilen hinzufüge, werden polnische Sonderzeichen durch Zeichenfolgen wie Å›
(polnischer Buchstabe ś
wird durch ersetzt Å›
) ersetzt.
Ich habe in mcedit überprüft, dass die Datei auf Server A und Server B auf beiden Servern denselben Wert hat. Der polnische Buchstabe „ś“ ist auf beiden Maschinen C5 9B (Hex).
Das Schlimmste ist, dass ich jedes Mal, wenn Sonderzeichen vorhanden sind, die Datenbank manuell prüfen und Fehler korrigieren muss.
Wenn ich Spaltenwerte in der Datenbank mit einem PHP-Migrationsskript bearbeite, werden meine Daten in der Datenbank wahrscheinlich auch beschädigt. Als ich Daten aus einer Tabelle las, bearbeitete und dann speicherte, wurden meine Daten ebenfalls beschädigt.
Wenn ich die Gebietsschemas auf Server B ändere, pl_PL.UTF-8
funktionieren dann Sonderzeichen in anderen Sprachen (wie Deutsch, Tschechisch usw.) einwandfrei? Wenn es ein Problem mit Schriftarten ist, warum sind dann auch Datenbankmigrationen beschädigt? Ich verwende UTF-8, also sollten alle Sonderzeichen aus allen Sprachen korrekt angezeigt werden? Wie werden Sonderzeichen aus allen Sprachen richtig angezeigt und was muss getan werden, damit PHP-Migrationen korrekt durchgeführt werden?
UPDATE 1:
Server A locale -a
gibt aus:
C
C.UTF-8
pl_PL.utf8
POSIX
Server B locale -a
gibt aus:
C
C.UTF-8
en_US.utf8
POSIX
Auf beiden Servern gibt locale -m viele Charmaps aus (scheint auf beiden Maschinen gleich zu sein)
Antwort1
Überprüfen Sie die Ausgabe locale -a
und locale -m
stellen Sie sicher, dass Server B die richtigen Gebietsschemas und Zeichensätze installiert hat, um pl_PL.UTF-8 richtig zu interpretieren.