Кодировка "UTF-8" не поддерживается средой выполнения Java

Всякий раз, когда я запускаю приложение Apache Felix (OSGi) под SUN Java (сборка 1.6.0_10-rc2-b32 и другие версии 1.6.x), я вижу следующее сообщение на консоли (обычно под Ubuntu 8.4):

Предупреждение. Кодировка "UTF-8" не поддерживается средой выполнения Java.

Я видел это сообщение иногда, когда запускал как Tomcat, так и Resin. Если java поддерживает unicode и UTF-8, что вызывает это сообщение? Я еще не нашел никакой ссылки или ответа на это где-нибудь еще.

Ответ 1

документация "Каждая реализация платформы Java необходима для поддержки следующих стандартных кодировок... US-ASCII, ISO-8859 -1, UTF-8, UTF-16BE, UTF-16LE, UTF-16." Поэтому я сомневаюсь, что Sun выпустила сборку без поддержки UTF-8.

Фактическое сообщение об ошибке выглядит от здесь, которое является частью анализатора XML Xerces. Я предполагаю, что это синтаксический анализатор XML, где возникает проблема.

Ответ 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", без тире.

Ответ 6

Если вы получаете это сообщение при использовании Transformer, попробуйте указать TransformerFactory:

ссылка