4

我们正在使用默认语言环境“POSIX”的 Linux 服务器上运行 Java Web 应用程序。我们的一些客户上传文件名中包含非 ascii 字符的文件。我们可以通过unicode保留Java中的那些非ascii字符,但是在我们实际将上传的文件保存到文件系统后,它们会丢失(保存的文件名会包含很多问号),因为文件系统的默认语言环境不支持非- ascii 字符。在用 Java 保存文件之前,有没有办法为文件名(而不是内容)指定一个字符集?

4

2 回答 2

3

可移植的Java API 没有文件系统字符编码的概念,因为它是不可移植的:例如Windows 将文件名保存为unicode,无论语言环境如何。但是,在 Linux 上,LC_CTYPE您的语言环境方面决定了文件系统的编码。因此,通过在启动 Java 应用程序之前导出LC_CTYPE=en_US.utf8或类似环境,您的应用程序将使用它来处理文件名。

另请参阅file.encoding has no effect,LC_ALL 环境变量执行此操作,它讨论了此转换背后的一些内部结构。

于 2012-10-24T06:39:30.603 回答
0

如果文件完全在您的应用程序的控制之下,而不是被上传以供另一个应用程序使用,那么我会考虑在保存文件之前对文件名进行自己的编码/解码,例如URLEncoder.encode(filename, "UTF-8")将用户提供的名称映射到您可以在磁盘上使用,URLDecoder.decode(encodedName, "UTF-8")反之亦然。

于 2012-10-24T07:54:12.613 回答