我一直在寻找多年,并没有找到任何与我有同样问题的人。当我在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äbbisSchäfer12år12.0kg svans = 14.4]
但是,如果我在CMD中编译并运行程序,则同一行显示为:
[Bj?bbis Sch?fer12år12.0kg svans = 14.4]
有没有解决方案让这个工作?我已经阅读了有关字节,字符串,字符转换的内容,但我不认为这是我正在寻找的内容!
编辑:我忘了提到所有与ArrayList无关的字符串都在Windows CMD中正确显示。所以奇怪的是只有ArrayList内容显示不正确。我还在Dog类中超出了.toString方法,如下所示:
public String toString() {
return name + " " + race + " " + getAge() + " år " + getWeight() + " kg " + "svans="+ getTailLength();
}
任何帮助表示赞赏! TIA
答案 0 :(得分:1)
编辑:我已撤销我的回答,以便其信息现在正确无误。
包含特殊字符(如å,ä,ö)的普通字符串工作的原因是因为这些字符串是以cmd可以读取的方式编码的。
当您使用扫描仪时,字符串的编码方式使cmd无法读取,因此,您必须确保所有扫描仪输入都已正确编码,以便cmd可以读取它。 / p>
可以通过修改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没有显示å,ä,characters字符是正确的,因此我必须手动将Eclipse控制台设置为与Windows cmd默认情况下的chcp 850不同。
微软对所有这一切都有错。毫无疑问,cmd不支持UTF-8而且从来没有。这太愚蠢了。我打赌它与贪婪的M $想要的$$$有关。