C++ 在log4cxx中使用utf-8字符
我需要能够使用带有log4cxx的utf-8编码字符串。我可以用C++ 在log4cxx中使用utf-8字符,c++,logging,log4cxx,C++,Logging,Log4cxx,我需要能够使用带有log4cxx的utf-8编码字符串。我可以用std::cout打印字符串(字符显示正确)。使用log4cxx,即使用consoleApender将字符串放入log4cxx_DEBUG()宏将输出“?”而不是特殊字符。我找到了一个解决方案: LOG4CXX_DECODE_CHAR(logstring, str); LOG4CXX_DEBUG(logstring); 其中,str是我的输入字符串,但这不起作用。有人知道这是怎么回事吗?我在谷歌上搜索了一下,但找不到任何有用的东西
std::cout
打印字符串(字符显示正确)。使用log4cxx,即使用consoleApender
将字符串放入log4cxx_DEBUG()
宏将输出“?”而不是特殊字符。我找到了一个解决方案:
LOG4CXX_DECODE_CHAR(logstring, str);
LOG4CXX_DEBUG(logstring);
其中,str
是我的输入字符串,但这不起作用。有人知道这是怎么回事吗?我在谷歌上搜索了一下,但找不到任何有用的东西。一个解决方案是使用
setlocale(LC_ALL, "en_US.UTF-8");
在我的主要职能中。这对我来说没问题,但如果您想要更多可本地化的应用程序,这可能会变得难以跟踪/使用。您可以使用
setlocale(LC_CTYPE, "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是独立于语言的,不应该表示语言。(如果有人也知道原因,这将是答案的有趣改进)。也许这也取决于操作系统
最后,在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
希望这将帮助任何需要它的人