Сломанные символы в именах файлов только в некоторых каталогах

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

Другие вопросы по тегам