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