Java运行时不支持编码“UTF-8”

每当我在SUN Java(构build1.6.0_10-rc2-b32和其他1.6.x版本)下启动基于Apache Felix(OSGi)的应用程序时,我在控制台(通常在Ubuntu 8.4下)看到以下消息输出:

警告:Java运行时不支持编码“UTF-8”。

我在运行Tomcat和Resin的时候偶尔会看到这个消息。 如果java支持unicode和UTF-8,那么这个消息是什么原因呢? 我还没有find任何参考,或在任何其他地方的答案。

Solutions Collecting From Web of "Java运行时不支持编码“UTF-8”"

根据文档 “每个Java平台的实现都需要支持以下标准字符集:US-ASCII,ISO-8859-1,UTF-8,UTF-16BE,UTF-16LE,UTF-16。 所以我怀疑Sun发布了一个没有UTF-8支持的版本。

实际的错误信息似乎来自这里 ,它是Xerces XML解析器的一部分。 我想这是问题发生的XML解析器。

尝试以下程序:

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就OK了,你的应用程序正在做一些奇怪的事情。

如果是这样的话,在调试器下运行你的应用程序,并在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:

链接