作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我们正在使用默认区域设置“POSIX”的 Linux 服务器上运行 Java Web 应用程序。我们的一些客户上传的文件在文件名中包含非 ASCII 字符。我们可以通过 unicode 在 Java 中保留那些非 ascii 字符,但是当我们将上传的文件实际保存到文件系统中时,它们会丢失(保存的文件名会包含很多问号),因为文件系统的默认语言环境不支持非- ascii 字符。在用 Java 保存文件之前,有没有办法为文件名(不是内容)指定一个字符集?
最佳答案
可移植的 Java API 没有文件系统字符编码的概念,因为它不可移植:Windows 例如无论语言环境如何,都将文件名保存为 unicode。但是,在 Linux 上,区域设置的 LC_CTYPE
方面决定了文件系统的编码。因此,通过导出 LC_CTYPE=en_US.utf8
或类似在您启动 Java 应用程序之前 的环境,您的应用程序将使用它来处理文件名。
另见 file.encoding has no effect, LC_ALL environment variable does it其中讨论了此转换背后的一些内部机制。
关于java - 如何在 Java 中为文件名(不是内容)指定一个字符集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13042214/
我是一名优秀的程序员,十分优秀!