java - 将 cp-1252 编码为 utf-8?

标签 java linux utf-8 character-encoding cp1252

我正在尝试编写一个 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/

相关文章:

java - 通过 bash 脚本将参数传递给正在运行的后台 java 进程

java - 如何避免在 Akka 中重新运行 Actor?

linux - gcc .h 没有这样的文件或目录(openssl、anaconda、Ubuntu 18.04

javascript - 从JavaScript向C++发送数据,超过127的字节值被替换为 "replacement character"

git - 将源代码文件的 Git 存储库从 ISO-8859-1 编码切换为 UTF-8 编码

java - Spring AMQP - 发布者确认不关闭未使用的 channel

java - A* star openlist 未按预期工作

linux - QMake : “Extra characters after test expression error” when using the “system()” function

linux - 无法从 AWS 外部通过 HTTP 连接到 EC2 实例

python - 如何使用 Python 脚本从 PDF 中读取阿拉伯文本