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

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

Другие вопросы по тегам