gpt4 book ai didi

java - 特殊的非 ASCII 字符显示为 ?打印 ArrayList 时

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:56:33 26 4
gpt4 key购买 nike

我找了好久都没找到和我有同样问题的人。当我在 Eclipse 中运行我的程序时,一切看起来都很好。一旦我在 Windows CMD 中运行它,我的 ArrayList 中的所有特殊非 ASCII 字符都会被替换为 ?。 Dog类中有两个属性是字符串,分别是“name”和“race”。

这是在我的主程序中打印列表的代码:

System.out.println("\r\nLista på hundar i hundregistret: " + viewDogList.toString() + "\r\n");

以下是我的 Dog 类、属性和使用的方法的信息:

private String name; //attribute for the dog's name
private String race; //attribute for the dog's race

public Dog(String name, String race, int age, double weight)

public String getName() { //hämta hundnamn
return name;
}

public void setName (String name) { //sätta hundnamn
this.name = name;
}

public String getRace() {
return race;
}

public void setRace (String race) { //sätta hundras
this.race = race;
}

这就是 Dog 列表的构建方式和 Dog 对象的添加方式:

ArrayList<Dog> viewDogList= new ArrayList<Dog>();
Dog dogInstance = new Dog("", "", 0, 0.0);
viewDogList.add(dogInstance);

当我添加 Dog 对象后在 Eclipse 中打印列表时,它显示为:

[Bjäbbis Schäfer 12 år 12.0 kg svans=14.4]

但是,如果我在 CMD 中编译并运行该程序,同一行将显示为:

[Bj?bbis Sch?fer 12 år 12.0 kg svans=14.4]

是否有任何解决方案可以让它发挥作用?我已经阅读了一些有关字节、字符串、字符转换的内容,但我认为这不是我要找的内容!

编辑:我忘了提到所有与 ArrayList 无关的字符串都正确显示在 Windows CMD 中。所以奇怪的是只有ArrayList的内容显示不正确。

我也像这样在 Dog 类中超限了 .toString 方法:

public String toString() {
return name + " " + race + " " + getAge() + " år " + getWeight() + " kg " + "svans="+ getTailLength();
}

感谢任何帮助!时间差

最佳答案

编辑:我已撤销我的回答,因此其信息现在是正确的。

包含 å、ä、ö 等特殊字符的普通字符串之所以起作用,是因为这些字符串以 cmd 可以读取的方式进行编码。

当您使用扫描器时,字符串以 cmd 无法读取的方式编码,因此,您必须确保所有扫描器输入都正确编码,以便 cmd 可以读取它。

可以通过修改Scanner来设置输入的字符编码:

new Scanner(System.in, "UTF-8")

编辑:Windows 中的另一个问题导致 cmd 不接受 chcp 更改。 'chcp' is not recognized as an internal or external command, operable program or batch file. on a Windows PC

编辑:将 cmd 设置为 chcp 65001/UTF-8 无效。

结论:cmd默认不支持UTF-8,但是设置cmd为UTF-8(chcp 65001)对java不起作用。如果您仍然输入非 ascii 字符,输出仍然不正确并且程序会崩溃。

编辑:

绝对没有办法让 cmd 使用 UTF-8。我必须使用扫描仪来:

new Scanner(System.in, "cp850")

当然,这使得 Eclipse 无法正确显示 å、ä、ö 字符,因此我不得不手动将 Eclipse 控制台设置为显示 chcp 850,就像 Windows cmd 默认情况下所做的那样。

微软对这一切都有过错。绝对没有逻辑 cmd 不支持 UTF-8,而且从来没有。这太愚蠢了。我敢打赌这与贪婪的 M$ 想要 $$$ 有关。

关于java - 特殊的非 ASCII 字符显示为 ?打印 ArrayList 时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33940121/

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