Использование символов 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
надеюсь, это поможет всем, кто в этом нуждается.