2008-10-07 2 views
10

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

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

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

+0

Странно. UTF-8 является обязательным кодированием. Никто не должен выпускать среду выполнения Java, которая не включает UTF-8 и US-ASCII. – erickson 2008-10-07 06:17:00

+0

Это может быть что-то недостающее в базовой ОС? – skaffman 2008-10-07 07:26:02

+0

Никто не должен использовать RC-сборку на производственной системе :) – 2009-07-28 10:31:34

ответ

11

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

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

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 не может найти кодировку.

2

Скорее всего, кто-то поставил catch(), ожидая наличия только неподдерживаемых исключений для кодирования, поэтому он использовал соответствующее сообщение. Но он использовал слишком широкую спецификацию исключений (например, catch (Exception ex)), поэтому, когда во время выполнения у него есть что-то еще (недействительный XML, NPE, ...), сообщение стало вводящим в заблуждение.

0

Попробуйте другой (стабильный выпуск) JVM. Однажды у меня была эта проблема, и оказалось, что на машине была запущена бета-версия JVM, которая действительно не поддерживала UTF-8, что противоречит требованию в документах API.

0

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

link

Смежные вопросы