我们有一个运行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是“ö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 $
也许在SVN过程中没有设置LC_CTYPE?当它由网络服务器,批处理作业等间接运行时,不难发生.