Загрузка Java Charset вручную

Я делаю некоторую работу, используя API JavaMail, и я столкнулся с кодировками, которые Java не поддерживает изначально (по замыслу), такими как UTF7/unicode-1-1-utf-7. Для этой кодировки, в частности, я нашел реализацию JUTF7 Java Charset а также CharsetProvider для UTF7. Однако, добавив jutf7.jar в мой classpath, я все равно получаю UnsupportedEncodingExceptions, а unicode-1-1-utf-7 определенно является псевдонимом JUTF7.

Есть ли способ вручную загрузить Charset или убедитесь, что Charset загружается, чтобы я мог исключить это как причину?

2 ответа

Решение

Использование нового Charset - это не только добавление необходимых классов в путь к классам. Процитирую Javadocs:

Поставщик набора символов идентифицирует себя с помощью файла конфигурации поставщика с именем java.nio.charset.spi.CharsetProvider в каталоге ресурсов META-INF/services. Файл должен содержать список полностью определенных имен классов конкретного поставщика charset, по одному на строку. [...]

( http://download.oracle.com/javase/6/docs/api/java/nio/charset/spi/CharsetProvider.html)

Этот специальный файл присутствует в JAR?

Вы должны убедиться, что jar загружен основным загрузчиком классов. Вы можете добиться этого, добавив банку к JVM jre/lib/ext расширение каталога или добавление его в путь к классам основной программы. Например, если вы используете Tomcat, добавьте -cp /path/to/jutf7.jar в сценарий запуска Tomcat.

Точно так же, если вы хотите протестировать jutf7 из REPL Scala, вам нужно запустить его следующим образом

env JAVA_OPTS="-cp /path/to/jutf7-1.0.0.jar" scala

Протестировано с Java HotSpot(TM) 64-Bit Server VM (build 20.8-b03-424, mixed mode)

Другие вопросы по тегам