gpt4 book ai didi

Linux 上的 Java 字符集问题

转载 作者:行者123 更新时间:2023-12-02 01:17:19 25 4
gpt4 key购买 nike

问题:我有一个包含特殊字符的字符串,我将其转换为字节,反之亦然。转换在 Windows 上正常工作,但在 Linux 上特殊字符未正确转换。Linux 上的默认字符集是 UTF-8,如图所示与 Charset.defaultCharset.getdisplayName()

但是,如果我使用选项 -Dfile.encoding=ISO-8859-1 在 Linux 上运行,它可以正常工作..

如何在unix环境中使用UTF-8默认字符集而不设置-D选项使其工作。

编辑:我使用jdk1.6.13

编辑:代码片段适用于 cs =“ISO-8859-1”;或 cs="UTF-8";在 win 上可以,但在 linux 上不行

        String x = "½";
System.out.println(x);
byte[] ba = x.getBytes(Charset.forName(cs));
for (byte b : ba) {
System.out.println(b);
}
String y = new String(ba, Charset.forName(cs));
System.out.println(y);

~问候达德

最佳答案

您的角色可能会被编译过程损坏,并且您的类文件中会出现垃圾数据。

if i run on linux with option -Dfile.encoding=ISO-8859-1 it works properly..

The "file.encoding" property is not required by the J2SE platform specification; it's an internal detail of Sun's implementations and should not be examined or modified by user code. It's also intended to be read-only; it's technically impossible to support the setting of this property to arbitrary values on the command line or at any other time during program execution.

简而言之,不要使用 -Dfile.encoding=...

    String x = "½";

由于 U+00bd (½) 在不同的编码中将由不同的值表示:

windows-1252     BD
UTF-8 C2 BD
ISO-8859-1 BD

...您需要告诉编译器您的源文件的编码方式:

javac -encoding ISO-8859-1 Foo.java

现在我们来看看这个:

    System.out.println(x);

作为 PrintStream ,这将在发出字节数据之前将数据编码为系统编码。像这样:

 System.out.write(x.getBytes(Charset.defaultCharset()));

some platforms 上这可能会或可能不会如您所期望的那样工作。 - 字节编码必须与控制台期望字符正确显示的编码相匹配。

关于Linux 上的 Java 字符集问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2168350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com