Мне нужно иметь возможность использовать строки в кодировке utf-8 с log4cxx. Я могу распечатать строки очень хорошо с std::cout
(символы отображаются правильно). Используя log4cxx, т.е. помещая строки в LOG4CXX_DEBUG()
макрос с ConsoleAppender
выведет «??» вместо специального символа. Я нашел одно решение:
LOG4CXX_DECODE_CHAR(logstring, str);
LOG4CXX_DEBUG(logstring);
где str
моя строка ввода, но это не работает. У кого-нибудь есть идея, как это может работать? Я немного погуглил, но ничего полезного не нашел.
Ты можешь использовать
setlocale(LC_CTYPE, "UTF-8");
установить только кодировку символов, не меняя никакой другой информации о локали.
Одним из решений является использование
setlocale(LC_ALL, "en_US.UTF-8");
в моей основной функции. Это нормально для меня, но если вы хотите больше локализуемых приложений, это, вероятно, станет трудно отслеживать / использовать.
Первый ответ не работает для меня, второй больше, чем я хочу. Поэтому я объединил два ответа:
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
Я встретил ту же проблему и искал и искал. Я нашел этот пост, он может работать, но мне не нравится setlocaleish
решение. так что я сделал больше исследований, наконец, решение вышло.
Я перенастроить log4cxx
и построить его, проблема была решена!
добавить еще два параметра конфигурации в log4cxx
:
./configure --prefx=blabla --with-apr=blabla --with-apr-util=blabla --with-charset=utf-8 --with-logchar=utf-8
надеюсь, это поможет всем, кто в этом нуждается.