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

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

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

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

7

Решение

Ты можешь использовать

setlocale(LC_CTYPE, "UTF-8");

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

3

Другие решения

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

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

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

1

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

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

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

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

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

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

# locale -a | grep utf
1

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

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

добавить еще два параметра конфигурации в log4cxx:

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

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

1
По вопросам рекламы [email protected]