我正在尝试编写一个 Java 应用程序,该应用程序将在 Linux 服务器上运行,但它将使用 cp-1252 作为字符集处理在旧版 Windows 机器上生成的文件。无论如何将这些文件编码为 utf-8 而不是它生成的 cp-1252?
最佳答案
如果文件名和内容有问题,解决问题的最简单方法是将 Linux 机器上的 locale
设置为基于 ISO-8859-1< 的内容
而不是 UTF-8
。您可以使用 locale -a
列出可用的语言环境。例如,如果您有 en_US.iso88591
,您可以使用:
export LANG=en_US.iso88591
这样 Java 将使用 ISO-8859-1 作为文件名,这可能已经足够好了。要运行 Java 程序,您仍然需要设置 file.encoding
系统属性:
java -Dfile.encoding=cp1252 -cp foo.jar:bar.jar blablabla
如果没有可用的 ISO-8859-1 语言环境,您可以使用 localedef
生成一个。不过安装它需要 root 权限。事实上,您可以生成一个使用 CP-1252 的语言环境,如果它在您的系统上可用的话。例如:
sudo localedef -f CP1252 -i en_US en_US.cp1252
export LANG=en_US.cp1252
这样一来,Java 应该默认对所有 I/O 使用 CP1252,包括文件名。
在此处进一步扩展:http://jonisalonen.com/2012/java-and-file-names-with-invalid-characters/
关于java - 将 cp-1252 编码为 utf-8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12045581/