свойство конфигурации karaf искажено

Я реализую интерфейс org.osgi.service.cm.ManagedService для получения конфигурации Karaf. Но когда я присваиваю свойству китайское значение, оно искажается. Изначально файлы в папке etc закодированы в latin1. Я пытался установить кодировку utf-8, но это не помогло. Может кто-нибудь помочь мне?


person happy programmer    schedule 29.02.2016    source источник


Ответы (2)


В Karaf файлы конфигурации (т.е. etc/*.cfg) обрабатываются подпроектом felix "fileinstall".

fileinstall еще не поддерживает указание пользовательской кодировки символов для конфигурации, он использует класс Properties и Properties.load(InputStream), которые документируют:

Методы load(Reader)/store(Writer, String) загружают и сохраняют свойства из символьного потока и в него в простом линейно-ориентированном формате, указанном ниже. Методы load(InputStream)/store(OutputStream, String) работают так же, как и пара load(Reader)/store(Writer, String), за исключением того, что поток ввода/вывода закодирован в кодировке символов ISO 8859-1. . Символы, которые не могут быть напрямую представлены в этой кодировке, могут быть записаны с использованием escape-последовательности Unicode, как определено в разделе 3.3 Спецификации языка Java™; в escape-последовательности допускается только один символ «u». Инструмент native2ascii можно использовать для преобразования файлов свойств в другие кодировки символов и обратно.

Таким образом, вы должны кодировать свой файл в ISE-8859-1 и заключать в кавычки каждый символ UTF или использовать файл xml для кодирования ваших файлов конфигурации.

person Jérémie B    schedule 29.02.2016
comment
Большое спасибо, Жереми Б. В этом и суть. Я меняю файл на кодировку символов ISO 8859-1. А затем конвертируйте китайские слова в формат Unicode. Теперь все работает. Спасибо. - person happy programmer; 01.03.2016
comment
Большое спасибо, @Jérémie B. Вы сэкономили мне много времени! - person Alexey Yakunin; 11.03.2016
comment
Та же концепция затрагивает Apache Felix OSGi. - person bitfox; 13.12.2020

Есть способ изменить кодировку файлов cfg. Конфигурация опроса файлов etc/*.cfg подпроекта fileinstall записывается в файл config.properties. Можете добавить

felix.fileinstall.configEncoding = UTF-8

Решение проверено в Karaf 4

person S.Nemets    schedule 16.03.2020