文件编码问题
我收到一个带有faroese名称的文件并尝试将其保存在PHP脚本中:
2010_08_Útflutningur.xls
在Ubuntu 10.04中,LTS将其保存为:
2010_08_ tflutningur.xls (invalid encoding)
我已经安装并运行了utf8-migration-tool
,但没有任何效果。
这是我可以解决的Ubuntu错误,还是我只需要放弃并修改php中的名称?
是否有一个文件说明Ubuntu中文件名的可接受字符集是什么,或者编码规范是什么?
谢谢
这看起来像编码问题。 不幸的是,PHP在编码时需要一些手持,因为它的字符串默认是单字节的。 如果您在PHP中创建文件名, utf8_encode()
应该会有所帮助; 但请注意,它假定输入采用ISO-8859-1编码。
另一方面,如果您使用客户端提交的文件名,也许您可以请求客户端为您执行编码。 这是通过
标记的accept-charset
属性和/或通过设置表单所在页面的charset来完成的。 某些客户可能会使用其中一个,因此为了获得最佳结果,请为每个客户使用UTF-8。
默认情况下,Ubuntu使用UTF-8作为文件名。 大多数现代Linux发行版和许多其他操作系统都这样做(Windows / NTFS是UTF-16最着名的例外)。
要修复名称与您显示的编码错误的文件,您可以尝试使用nautilus-filename-repairer
sudo apt-get install nautilus-filename-repairer
您可以使用PHP iconv
函数将字符串(文件名)从一种编码转换为另一种编码。 当然,这要求您知道它们的编码方式。
要从客户端获取正确编码的文件名,您可以尝试使用eswald解释的技术。