Sonderzeichen werden nicht richtig angezeigt

Sonderzeichen werden nicht richtig angezeigt

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 localeauf Server A erhalte ich LANG=pl_PL.UTF-8Andere Variablen außer LANGUAGEund LC=ALLsind 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 localeauf Server B wird angezeigt LANG=en_US.UTF-8. Andere Variablen außer LANGUAGEund LC=ALLsind 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-8funktionieren 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 -agibt aus:

C
C.UTF-8
pl_PL.utf8
POSIX

Server B locale -agibt 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 -aund locale -mstellen Sie sicher, dass Server B die richtigen Gebietsschemas und Zeichensätze installiert hat, um pl_PL.UTF-8 richtig zu interpretieren.

verwandte Informationen