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

时间:2015-11-26 13:37:12

标签: java string arraylist utf-8 character-encoding

我一直在寻找多年,并没有找到任何与我有同样问题的人。当我在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

1 个答案:

答案 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 $想要的$$$有关。