java - 如何在 Java 中为文件名(不是内容)指定一个字符集?

标签 java file encoding

我们正在使用默认区域设置“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/

相关文章:

python - 记录 TCP 套接字事件

java - 用于在文件中查找电子邮件地址/IP 地址的字符串标记生成器/正则表达式

java - UTC 时间戳 -> java.sql.Timestamp -> jOOQ -> postgreSQL 中的本地时间戳?

C - 读取文件并打印到文件后获取无效字符,可能是缓冲区溢出

python - 变量名似乎被覆盖

c# - 以UTF-16编码格式反序列化xml文件时出现XmlException

ios - AFNetworking 在格式化 JSON 时将我的 double 转换为带引号的字符串

java - 如何从 PrintStream 字节编码中恢复?

java - 编译 .java 文件

java生成30到32位范围内的随机数