Использование символов utf-8 в log4cxx

мне нужно иметь возможность использовать строки в кодировке utf-8 с log4cxx. Я могу печатать строки с std::cout (символы отображаются правильно). Используя log4cxx, т. е. помещая строки в LOG4CXX_DEBUG() макрос с ConsoleAppender выведет "??- вместо особого персонажа. Я нашел одно решение:--6-->

LOG4CXX_DECODE_CHAR(logstring, str);
LOG4CXX_DEBUG(logstring);

здесь str мой входной строки, но это не работает. Кто-нибудь знает, как это может сработать? Я немного погуглил, но ничего не нашел. полезный.

4 ответов


можно использовать

setlocale(LC_CTYPE, "UTF-8");

установить кодировку, не меняя любая другая информация о локали.


одним из решений является использование

setlocale(LC_ALL, "en_US.UTF-8");

в моей основной функцией. Это нормально для меня, но если вы хотите больше локализуемых приложений, это, вероятно, станет трудно отслеживать/использовать.


первый ответ не работает для меня, второй-больше, чем я хочу. Поэтому я объединил два ответа:--4-->

setlocale(LC_CTYPE, "xx_XX.UTF-8");  // or "xx_XX.utf8", it means the same

где xx_XX - это языковой тег. Я пытался регистрировать строки на многих языках с разными алфавитами (в LINUX, включая китайский, язык слева направо и rigth-слева); поэтому я попытался:

setlocale(LC_CTYPE, "it_IT.UTF-8");

и он работал с любого языка. Я не могу понять, почему простой "UTF-8" без указания языка xx_XX не работает, так как я использую UTF8 должен быть независимым от языка,и его нельзя указывать. (Если кто-то знает причину и для этого, было бы интересным улучшением ответа). Возможно, это также зависит от операционной системы.

наконец, в Linux вы можете получить список кодировок, набрав на shell:

# locale -a | grep utf

Я встретил ту же проблему и искал и искал. Я нашел этот пост, он может работать, но мне не нравится setlocaleish решение. так что я сделал больше исследований, наконец вышел.

изменить log4cxx и построить его, проблема была решена!

добавить еще два параметра настройки в log4cxx:

./configure --prefx=blabla --with-apr=blabla --with-apr-util=blabla --with-charset=utf-8 --with-logchar=utf-8

надеюсь, это поможет всем, кто в этом нуждается.