【问题标题】:The encoding 'UTF-8' is not supported by the Java runtimeJava 运行时不支持编码“UTF-8”
【发布时间】:2008-10-07 04:34:15
【问题描述】:

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

【问题讨论】:

  • 这是谁的java实现?哪个版本的java?哪些 Java 应用程序(是您编写的还是我们知道的开源应用程序)?
  • 奇怪。 UTF-8 是必需的编码。任何人都不应该发布不包含 UTF-8 和 US-ASCII 的 Java 运行时。
  • 会不会是底层操作系统缺少某些东西?
  • 我收到了同样的信息。不同的环境。当Transformer的实现是com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl时,我发现它来自Transformer的transform方法。
  • 也没有人应该在生产系统上使用 RC 构建 :)

标签: java linux unicode


【解决方案1】:

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

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

【讨论】:

  • 我的实例中的问题源于对 OSGi 和类加载器可见性的使用。多个包实例化了 Xerces XML 解析器,但未能找到字符集定义,因为这些资源不可见。
  • 请提供不可见的包。您必须让哪些包可见?
  • 如果这是解决方案,它是如何解决问题的?你能具体说明你做了什么吗?该问题出现在日志系统中的 Fuse ESB 4.4 中。
  • 是的,我可以证明这来自 Xerces...但我找不到任何真正的修复或解决方法。
【解决方案2】:

试试下面的程序:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

        • 鉴于 Dan Dyer 的回答,我认为情况并非如此。你有参考吗?
        • 迈克尔是正确的——有点。 JDK 源代码在各种 NIO、NIO2 和普通 IO 包中混合了 UTF8 和 UTF-8 引用。真的很糟糕。
        【解决方案6】:

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

        link

        【讨论】:

          猜你喜欢
          • 2011-10-08
          • 1970-01-01
          • 1970-01-01
          • 2012-02-29
          • 1970-01-01
          • 2021-10-27
          • 2014-01-03
          • 1970-01-01
          相关资源
          最近更新 更多