文件名编码问题


9

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

2010_08_Útflutningur.xls

在Ubuntu 10.04中,LTS将其另存为:

2010_08_�tflutningur.xls (invalid encoding)

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

这是我可以解决的Ubuntu错误,还是我不得不放弃并修改php中的名称?

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

谢谢


您如何通过PHP接收和保存文件?(代码是什么样的?)
Kees Cook 2010年

我是从电子邮件系统解析它的。代码很复杂:)
Elzo Valugi 2010年

一个类似的问答,其中包含用于修复损坏的文件名的脚本。
lumbric'3

Answers:


5

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

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


7

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

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

sudo apt-get install nautilus-filename-repairer

您可以使用PHP iconv函数将字符串(文件名)从一种编码转换为另一种编码。当然,这需要您知道它们以什么编码开始。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.