将 cp-1252 编码为 utf-8?

IAm*_*aja 2 java linux utf-8 cp1252 character-encoding

我正在尝试编写一个将在 Linux 服务器上运行的 Java 应用程序,但它将使用 cp-1252 作为字符集处理在旧版 Windows 计算机上生成的文件。是否有办法将这些文件编码为 utf-8 而不是生成的 cp-1252?

Jon*_*oni 5

如果文件名和内容有问题,解决该问题的最简单方法是将localeLinux 计算机上ISO-8859-1UTF-8. 您可以locale -a用来列出可用的区域设置。例如,如果你有,en_US.iso88591你可以使用:

export LANG=en_US.iso88591
Run Code Online (Sandbox Code Playgroud)

这样 Java 将使用 ISO-8859-1 作为文件名,这可能已经足够好了。要运行 Java 程序,您仍然需要设置file.encoding系统属性:

java -Dfile.encoding=cp1252 -cp foo.jar:bar.jar blablabla
Run Code Online (Sandbox Code Playgroud)

如果没有可用的 ISO-8859-1 语言环境,您可以使用localedef. 不过安装它需要 root 访问权限。事实上,如果您的系统上可用,您可以生成使用 CP-1252 的语言环境。例如:

sudo localedef -f CP1252 -i en_US en_US.cp1252
export LANG=en_US.cp1252
Run Code Online (Sandbox Code Playgroud)

这样,Java 应默认对所有 I/O(包括文件名)使用 CP1252。

此处进一步扩展:http://jonisalonen.com/2012/java-and-file-names-with-invalid-characters/