Специальные символы не отображаются правильно
У меня проблема при копировании файла с сервера 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