为什么从 UTF-8 到 ISO-8859-1 的转换在 Windows 和 Linux 中不一样?

2023-12-11

我在 jar 文件中包含从 UTF-8 转换为 ISO-8859-1 的代码,当我在 Windows 中执行此 jar 时,我得到一个结果,在 CentOS 中我得到另一个结果。也许有人知道为什么?

public static void main(String[] args) {

  try {

    String x = "Ä, ä, É, é, Ö, ö, Ü, ü, ß, «, »";

    Charset utf8charset = Charset.forName("UTF-8");
    Charset iso88591charset = Charset.forName("ISO-8859-1");

    ByteBuffer inputBuffer = ByteBuffer.wrap(x.getBytes());
    CharBuffer data = utf8charset.decode(inputBuffer);

    ByteBuffer outputBuffer = iso88591charset.encode(data);
    byte[] outputData = outputBuffer.array();

    String z = new String(outputData);

    System.out.println(z);
  }
  catch(Exception e) {
    System.out.println(e.getMessage());
  }
}

在 Windows 中, java -jar test.jar > test.txt 创建一个文件,其中包含: ä, ä, É, é, Ö, ö, Ü, ü, ß, «, »

但在 CentOS 中我得到: �?, ä, �?, é, �?, ö, �?, ü, �?, «, »


这两行

x.getBytes());

String z = new String(outputData);

特定于平台和默认编码。


通过避免特定于平台的转换,它可以在 Windows 和 Linux 上按预期运行。

String x = "Ä, ä, É, é, Ö, ö, Ü, ü, ß, «, »";

Charset utf8charset = Charset.forName("UTF-8");
Charset iso88591charset = Charset.forName("ISO-8859-1");

ByteBuffer inputBuffer = ByteBuffer.wrap(x.getBytes(utf8charset));
CharBuffer data = utf8charset.decode(inputBuffer);

ByteBuffer outputBuffer = iso88591charset.encode(data);
byte[] outputData = outputBuffer.array();

String z = new String(outputData, iso88591charset);

System.out.println(z);

prints

Ä, ä, É, é, Ö, ö, Ü, ü, ß, «, »
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么从 UTF-8 到 ISO-8859-1 的转换在 Windows 和 Linux 中不一样? 的相关文章

随机推荐