文件名编码问题

文件名编码问题

我得到了一个具有法罗群岛名称的文件并尝试将其保存在 PHP 脚本中:

2010_08_Útflutningur.xls

在 Ubuntu 10.04 LTS 中将其保存为:

2010_08_�tflutningur.xls (invalid encoding)

我已经安装并运行utf8-migration-tool,但没有效果。

这是一个我可以修复的 Ubuntu 错误吗?还是我只能放弃并修改 php 中的名称?

有没有文档说明 Ubuntu 中文件名可接受的字符集是什么,或者编码规范是什么?

谢谢

答案1

默认情况下,Ubuntu 使用 UTF-8 作为文件名。大多数现代 Linux 发行版和许多其他操作系统都这样做(Windows/NTFS 是最著名的例外,它使用 UTF-16)。

要修复名称编码错误的文件(如您显示的文件),您可以尝试使用nautilus-filename-repairer

sudo apt-get install nautilus-filename-repairer

您可以使用 PHPiconv函数将字符串(文件名)从一种编码转换为另一种编码。当然,这要求您首先知道它们采用的是什么编码。

要从客户端获取正确编码的文件名,您可以尝试 eswald 解释的技术。

答案2

这看起来像是一个编码问题。不幸的是,PHP 在编码方面需要一些帮助,因为它的字符串默认是单字节的。如果您在 PHP 中创建文件名,utf8_encode()应该有帮助;但请注意,它假设输入采用 ISO-8859-1 编码。

另一方面,如果您使用客户端提交的文件名,也许您可​​以请求客户端为您进行编码。这是通过accept-charset标记的属性<form>,和/或设置表单所在页面的字符集。某些客户端可能使用其中一种,因此为了获得最佳效果,请对每种客户端使用 UTF-8。

相关内容