繁体   English   中英

在log4cxx中使用utf-8字符

[英]Using utf-8 characters in log4cxx

我需要能够将utf-8编码的字符串与log4cxx一起使用。 我可以使用std::cout打印字符串(字符正确显示)。 使用log4cxx,即使用ConsoleAppender将字符串放入LOG4CXX_DEBUG()宏将输出“ ??” 而不是特殊字符。 我找到了一种解决方案:

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

其中str是我的输入字符串,但这不起作用。 任何人都知道这可能如何工作? 我用Google搜索了一下,但是找不到任何有用的东西。

您可以使用

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");

它可以与任何经过测试的语言一起使用。 我不明白为什么没有指出语言xx_XX的简单“ UTF-8”不起作用,因为我使用UTF8来独立于语言,并且不应该指示一种语言。 (如果有人也知道原因,那将是对答案的一个有趣的改进)。 也许这也取决于Operatin系统。

最后,在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

希望这对需要的人有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM