Назад | Перейти на главную страницу

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

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

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

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

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

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

Вероятно, когда я редактирую значения столбцов в базе данных с помощью скрипта миграции 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 выводит много charmaps (кажется одинаковым на обеих машинах)

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