11

SUN Java (ビルド 1.6.0_10-rc2-b32 およびその他の 1.6.x ビルド) で Apache Felix (OSGi) ベースのアプリケーションを起動するたびに、コンソールに次のメッセージ出力が表示されます (通常は Ubuntu 8.4 で)。

警告: エンコーディング 'UTF-8' は、Java ランタイムではサポートされていません。

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 パーサーの一部であるhereからのもののようです。問題が発生しているのは 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 を試してください。私は一度この問題を抱えていましたが、API ドキュメントの要件に反して、マシンが実際に UTF-8 をサポートしていないベータ版の JVM を実行していたことが判明しました。

于 2009-07-28T10:30:51.530 に答える
0

Transformer を使用しているときにこのメッセージが表示される場合は、TransformerFactory を指定してみてください。

リンク

于 2012-08-30T16:12:27.780 に答える
0

ダッシュなしの「UTF8」にする必要があります。

于 2011-02-25T16:07:07.990 に答える