Назад | Перейти на главную страницу

Неработающие символы в именах файлов только в некоторых каталогах

У нас есть веб-сервер под управлением 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? Нет ничего сложного в этом, когда он косвенно запускается веб-сервером, пакетным заданием и т. Д.