Специальные символы не отображаются правильно
У меня проблема при копировании файла с сервера A (Debian 7.4) на сервер B (Debian 7.4). Польские специальные символы в файлах не отображаются правильно на сервере B (в mcedit).
Я создал файл с польским специальным символом на сервере А. Он правильно отображается на сервере А. При запуске locale на сервере я получил LANG=pl_PL.UTF-8 Другие переменные, кроме LANGUAGE а также LC=ALL также настроены на pl_PL.UTF-8, Затем я tar-файл, и на сервере B I скачать tarred-файл с помощью команды wget. В файле Untar Server B I и когда я смотрю на содержимое файла (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
Сервер Б locale -a выходы:
C
C.UTF-8
en_US.utf8
POSIX
На обоих серверах локаль -m выводит много символов (кажется одинаковым на обеих машинах)
1 ответ
Проверьте вывод locale -a а также locale -m чтобы убедиться, что на сервере B установлены правильные локали и кодировки для правильной интерпретации pl_PL.UTF-8