Специальные символы отображаются неправильно

Специальные символы отображаются неправильно

У меня возникла проблема при копировании файла с сервера A (Debian 7.4) на сервер B (Debian 7.4). Польские специальные символы в файлах отображаются неправильно на сервере B (в mcedit).

Я создал файл со специальными польскими символами на сервере A. Он отображается правильно на сервере A. Когда я запускаю localeна сервере A, я получаю LANG=pl_PL.UTF-8Другие переменные, кроме LANGUAGEи LC=ALLтакже установлены в pl_PL.UTF-8. Затем я tar-файл, и на сервере BI загружаю tar-файл с помощью команды wget. На сервере BI распаковываю файл и когда я смотрю на содержимое файла (mcedit), то польские буквы отображаются неправильно. Вместо специальных символов есть «ромбы». Когда я запускаю localeна сервере B, то LANG=en_US.UTF-8. Другие переменные, кроме LANGUAGEи LC=ALLтакже установлены в en_US.UTF-8.

Затем я запускаю миграцию базы данных (скрипт php) и поврежденные данные вставляются в базу данных. Когда я добавляю строки в миграцию, то польские специальные символы заменяются строками типа Å›(польская буква śзаменяется на Å›).

Я проверил в mcedit, что файл на сервере A и на сервере B имеет одинаковое значение на обоих серверах. Польская буква 'ś' - это C5 9B (hex) на обеих машинах.

Хуже всего то, что каждый раз, когда встречаются специальные символы, мне приходится вручную проверять и исправлять ошибки в базе данных.

Вероятно, когда я редактирую значения столбцов в базе данных с помощью скрипта миграции php, он также повреждает мои данные в базе данных. Однажды я прочитал данные из таблицы, затем обработал их, а затем сохранил, и мои данные также были повреждены.

Если я изменю локали на сервере B, то pl_PL.UTF-8специальные символы на других языках (например, немецком, чешском и т. д.) будут работать нормально? Если это проблема со шрифтами, то почему также повреждены миграции базы данных? Я использую UTF-8, то каждый специальный символ из каждого языка должен отображаться правильно? Как правильно отображать специальные символы из каждого языка и что сделать, чтобы миграции php выполнялись правильно?

ОБНОВЛЕНИЕ 1:
Сервер А locale -aвыдает:

C
C.UTF-8
pl_PL.utf8
POSIX

Вывод сервера B locale -a:

C
C.UTF-8
en_US.utf8
POSIX

На обоих серверах locale -m выводит множество карт символов (кажется, одинаковых на обеих машинах)

решение1

Проверьте вывод locale -aи locale -mубедитесь, что на сервере B установлены правильные локали и кодировки для правильной интерпретации pl_PL.UTF-8.

Связанный контент