У меня проблема при копировании файла с сервера 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