每当我在 SUN Java(构建 1.6.0_10-rc2-b32 和其他 1.6.x 构建)下启动基于 Apache Felix (OSGi) 的应用程序时,我会在控制台上看到以下消息输出(通常在 Ubuntu 8.4 下):
警告:Java 运行时不支持编码“UTF-8”。
在同时运行 Tomcat 和 Resin 时,我偶尔也会看到此消息。如果 java 支持 unicode 和 UTF-8,是什么导致了这个消息?我还没有找到任何参考,或者在其他任何地方回答这个问题。
试试下面的程序:
import java.nio.charset.Charset;
public class TestCharset {
public static void main(String[] args) {
System.out.println(Charset.forName("UTF-8"));
}
}
如果这引发异常,那么您的 JDK 有问题。如果它打印“UTF-8”,那么你的 JDK 是好的,你的应用程序正在做一些奇怪的事情。
如果是这种情况,请在调试器下运行您的应用程序,并在http://www.java2s.com/Open-Source/Java-Document/XML/xalan/org/apache/xml/serializer/ToStream.java中设置断点.htm -- 这就是产生此警告的地方,并逐步了解为什么 Xalan 找不到编码。
很可能有人放了一个 catch() 期望只有不受支持的编码异常,所以他使用了适当的消息。但是他使用了太宽泛的异常规范(例如 catch( Exception ex ) ),所以当他在运行时得到其他东西(无效的 XML、NPE、...)时,该消息变得具有误导性。
尝试不同的(稳定版本)JVM。我曾经遇到过这个问题,结果发现机器运行的是测试版 JVM,它确实不支持 UTF-8,这与 API 文档中的要求相反。
它应该是“UTF8”,没有破折号。
如果您在使用 Transformer 时收到此消息,请尝试指定 TransformerFactory: