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