仅在某些目录中破坏文件名中的字符

我们有一个运行CentOS 5.8的Web服务器,它使用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 

为了快速完成更新,我们简单地将这些文件转移到我们的主目录中。 令人惊讶的是,他们的文件名在他们的新位置看起来很好:

 $ ls ~/ Työelämätrendit.csv Työkirja1.csv 

更新之后,我们将它们移回到原来的位置,并再次打破它们的文件名。 什么可能导致这个,我们如何解决? 系统的语言环境设置为LANG=en_US.UTF-8

x54 x79是ASCII中的“Ty”,它是有效的ISO-8859-1和UTF-8,但是xF6 x6B x69 x72是ISO-8859-1编码中的“ökir”,而不是有效的UTF-8。 它被翻译成两种方式,在令人毛骨悚然和辉煌之间。 这引出了文件系统是否涉及的问题。

大多数Unix文件系统对字符集都是不可知的 – 他们只是做字节。 你可以检查两个文件系统,如果有两个文件系统(一个可能不是ext3),关于如何挂载的细节,以及通过〜/ public_html / adm / email / upload /的path是否正在通过NFS或某些东西就像它可能将底层的另一个文件系统字符集分层一样 – 因为Samba具有明确的字符集选项,所以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过程中设置? 在networking服务器,批量作业等间接运行时不难发生。