我遇到了编码问题。不确定它是否与IDE相关,但我使用的是NetBeans 7.4。我在J2EE项目中得到了这段代码:
String test = "kukuřičné";
System.out.println(new String(test.getBytes("UTF-8"))); // should display ok
System.out.println(new String(test.getBytes("ISO-8859-1")));
System.out.println(new String(test.getBytes("UTF-16")));
System.out.println(new String(test.getBytes("US-ASCII")));
System.out.println(new String(test.getBytes("windows-1250")));
System.out.println(test); // should display ok
当我运行它时,它从未正常显示。 UTF-8应该可以打印出来,但它没有。当我尝试时:
System.out.println(Charset.defaultCharset());
它返回了windows-1252。该项目设置为UTF-8编码。我甚至尝试在UTF-8中重新保存这个特定的java文件,但它仍然无法正常显示。
另一方面,我试图创建J2SE项目,当我运行相同的代码时,它会正确显示。默认字符集也返回UTF-8。
两个项目都设置了UTF-8编码。
我希望我的J2EE项目与J2SE一样。在我将我的java更新为版本1.7.0_51-b13之前,我没有注意到这个问题但是我不确定这是否相关。
我遇到了像这个家伙一样的问题:http://forums.netbeans.org/ptopic37752.html
我还尝试为整个IDE设置默认编码:-J-Dfile.encoding = UTF-8但它没有帮助。
我注意到一个重要的事实。当我创建一个新的Web应用程序时,它显示正常。当我创建新的Maven Web应用程序时,它显示不正确。
在此处找到相同的问题:https://netbeans.org/bugzilla/show_bug.cgi?id=224526
我还没有修好它。仍然没有解决方案。
在我的pom.xml中,编码设置正确,但最后仍然显示了windows-1252。
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
答案 0 :(得分:9)
我花了几个小时试图找到最佳解决方案。
首先,这是一个maven的问题,即使您已指定要使用的不同编码,它也会选择平台编码并使用它。 Maven似乎并不关心(它甚至打印到控制台,它使用的是UTF-8,但是当你使用上面的代码运行文件时,它将无法正常显示)。
我设法通过设置系统变量解决了这个问题:
JAVA_TOOL_OPTIONS = -Dfile.encoding = UTF8
应该有另一个选项,而不是设置系统变量,即将其设置为附加的编译器参数。
像javac -Dfile.encoding = UTF8
答案 1 :(得分:1)
您在这里混合了一些概念:
test.getBytes("UTF-8")
返回一系列字节,表示UTF-8
编码new String(test.getBytes("UTF-8"), StandardCharsets.UTF_8)