文件名编码问题

Elz*_*ugi 10 server charset

我正在获取一个带有法罗语名称的文件并尝试将其保存在 PHP 脚本中:

2010_08_Útflutningur.xls
Run Code Online (Sandbox Code Playgroud)

在 Ubuntu 10.04 LTS 中将其保存为:

2010_08_?tflutningur.xls (invalid encoding)
Run Code Online (Sandbox Code Playgroud)

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

这是我可以修复的 Ubuntu 错误还是我只需要放弃并修改 php 中的名称?

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

谢谢

Jan*_*anC 7

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

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

sudo apt-get install nautilus-filename-repairer
Run Code Online (Sandbox Code Playgroud)

您可以使用 PHPiconv函数将字符串(文件名)从一种编码转换为另一种编码。当然,这要求您一开始就知道它们的编码方式。

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


小智 5

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

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