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