У нас есть веб-сервер под управлением CentOS 5.8, который использует SVN для контроля версий. При попытке перейти на последнюю ревизию мы получили ошибку в именах файлов в каталоге загрузки:
svn: Error converting entry in directory 'adm/emails/upload' to UTF-8
svn: Valid UTF-8 data
(hex: 54 79)
followed by invalid UTF-8 sequence
(hex: f6 6b 69 72)
В ходе расследования мы заметили, что были некоторые файлы с неправильными именами:
$ ls ~/public_html/adm/emails/upload/
Ty?el?m?trendit.csv
Ty?kirja1.csv
Для быстрого завершения обновления мы просто mv
отредактировал файлы в нашем домашнем каталоге. Удивительно, но их имена файлов выглядели хорошо в новом месте:
$ ls ~/
Työelämätrendit.csv
Työkirja1.csv
После обновления мы вернули их туда, где они были, и их имена снова были сломаны. Что могло вызвать это и как это исправить? Локаль системы установлена на LANG=en_US.UTF-8
.
X54 x79 - это "Ty" в кодировке ASCII, которая является допустимой для ISO-8859-1 и UTF-8, но xF6 x6B x69 x72 - это "ökir" в кодировке ISO-8859-1 и НЕ действительный UTF-8. То, что это переводится в обе стороны, это что-то среднее между жутким и блестящим. Это поднимает вопрос, задействована ли вообще файловая система.
Большинство файловых систем Unix довольно агностически относятся к наборам символов - они просто обрабатывают байты. Вы можете проверить обе файловые системы, если их две (одна может быть не ext3), особенности их монтирования и выяснить, проходит ли путь через ~ / public_html / adm / email / upload / через NFS или что-то в этом роде. как он, который может накладывать другой набор символов файловой системы на базовый - Samba было бы действительно интересно найти там, поскольку у нее есть явные параметры кодировки.
Конечно, неплохо также проверить, не установлен ли LC_CTYPE странно:
$ touch Työelämätrendit.csv
$ ls T*
Työelämätrendit.csv
$ LC_CTYPE=C ls T*
Ty??el??m??trendit.csv
$
Возможно, LC_CTYPE не был установлен в процессе SVN? Нет ничего сложного в этом, когда он косвенно запускается веб-сервером, пакетным заданием и т. Д.