Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在log4cxx中使用utf-8字符_C++_Logging_Log4cxx - Fatal编程技术网

C++ 在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是我的输入字符串,但这不起作用。有人知道这是怎么回事吗?我在谷歌上搜索了一下,但找不到任何有用的东西

我需要能够使用带有log4cxx的utf-8编码字符串。我可以用
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
希望这将帮助任何需要它的人