特殊文字が正しく表示されない

特殊文字が正しく表示されない

サーバー A (Debian 7.4) からサーバー B (Debian 7.4) にファイルをコピーするときに問題が発生します。ファイル内のポーランド語の特殊文字がサーバー B (mcedit) で正しく表示されません。

サーバー A でポーランド語の特殊文字を含むファイルを作成しました。サーバー A では正しく表示されます。サーバー Alocaleで実行すると、 とLANG=pl_PL.UTF-8を除くその他の変数も に設定されます。次に、ファイルを tar し、サーバー BI で wget コマンドを使用して tar されたファイルをダウンロードします。サーバー BI でファイルを untar し、ファイルの内容を確認すると (mcedit)、ポーランド語の文字が正しく表示されません。特殊文字の代わりに「ダイヤモンド」があります。サーバー B で実行すると になります。 と を除くその他の変数もに設定されます。LANGUAGELC=ALLpl_PL.UTF-8localeLANG=en_US.UTF-8LANGUAGELC=ALLen_US.UTF-8

次に、データベース移行 (PHP スクリプト) を実行し、破損したデータがデータベースに挿入されます。移行で行を追加すると、ポーランド語の特殊文字がÅ›(ポーランド語の文字śが に置き換えられますÅ›) のような文字列に置き換えられます。

mcedit で確認したところ、サーバー A とサーバー B のファイルは両方のサーバーで同じ値になっています。ポーランド語の文字 'ś' は両方のマシンで C5 9B (16 進数) です。

最悪なのは、特殊文字があるたびに、データベース内のエラーを手動で確認して修正する必要があることです。

おそらく、PHP 移行スクリプトによってデータベースの列の値を編集すると、データベースのデータも破損します。テーブルからデータを読み取り、操作して保存すると、データも破損しました。

サーバー B のロケールを変更すると、pl_PL.UTF-8他の言語 (ドイツ語、チェコ語など) の特殊文字は正常に機能しますか? フォントの問題である場合、データベースの移行も破損しているのはなぜですか? UTF-8 を使用しているので、すべての言語のすべての特殊文字が正しく表示されるはずです。すべての言語の特殊文字を適切に表示するにはどうすればよいでしょうか。また、PHP の移行を正しく実行するために何をすればよいでしょうか。

更新 1:
サーバー A のlocale -a出力:

C
C.UTF-8
pl_PL.utf8
POSIX

サーバーBのlocale -a出力:

C
C.UTF-8
en_US.utf8
POSIX

両方のサーバーで locale -m は多くの charmaps を出力します (両方のマシンで同じようです)

答え1

の出力をチェックしてlocale -alocale -mサーバーBにpl_PL.UTF-8を正しく解釈するための正しいロケールと文字セットがインストールされていることを確認します。

関連情報