Я реализую интерфейс org.osgi.service.cm.ManagedService для получения конфигурации Karaf. Но когда я присваиваю свойству китайское значение, оно искажается. Изначально файлы в папке etc закодированы в latin1. Я пытался установить кодировку utf-8, но это не помогло. Может кто-нибудь помочь мне?
свойство конфигурации karaf искажено
Ответы (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 для кодирования ваших файлов конфигурации.
Есть способ изменить кодировку файлов cfg. Конфигурация опроса файлов etc/*.cfg подпроекта fileinstall записывается в файл config.properties. Можете добавить
felix.fileinstall.configEncoding = UTF-8
Решение проверено в Karaf 4