11

每当我在 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,是什么导致了这个消息?我还没有找到任何参考,或者在其他任何地方回答这个问题。

4

6 回答 6

12

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

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

于 2008-10-07T10:29:58.460 回答
7

试试下面的程序:

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 找不到编码。

于 2008-10-07T10:55:31.887 回答
2

很可能有人放了一个 catch() 期望只有不受支持的编码异常,所以他使用了适当的消息。但是他使用了太宽泛的异常规范(例如 catch( Exception ex ) ),所以当他在运行时得到其他东西(无效的 XML、NPE、...)时,该消息变得具有误导性。

于 2008-10-07T10:56:45.737 回答
0

尝试不同的(稳定版本)JVM。我曾经遇到过这个问题,结果发现机器运行的是测试版 JVM,它确实不支持 UTF-8,这与 API 文档中的要求相反。

于 2009-07-28T10:30:51.530 回答
0

它应该是“UTF8”,没有破折号。

于 2011-02-25T16:07:07.990 回答
0

如果您在使用 Transformer 时收到此消息,请尝试指定 TransformerFactory:

关联

于 2012-08-30T16:12:27.780 回答