使用log4cxx中的UTF-8字符

Using utf-8 characters in log4cxx

本文关键字:字符 UTF-8 中的 log4cxx 使用      更新时间:2023-10-16

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

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

其中str是我的输入字符串,但这不起作用。有人知道这可能如何工作吗?我有点谷歌,但找不到任何有用的东西。

您可以使用

setlocale(LC_CTYPE, "UTF-8");

仅设置字符编码,而无需更改有关语言环境的任何其他信息。

我遇到了相同的问题并进行了搜索和搜索。我找到了这篇文章,它可能会起作用,但我不喜欢setlocaleish解决方案。因此,我做了更多的研究,最后解决了解决方案。

我重新配置log4cxx并构建它,解决了问题!

log4cxx中添加两个配置选项:

./configure --prefx=blabla --with-apr=blabla --with-apr-util=blabla --with-charset=utf-8 --with-logchar=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是与语言无关的,并且不应该指出一种。(如果有人也知道这样做的原因,那么答案将是一个有趣的改进)。也许这也取决于操作系统。

最后,在Linux上,您可以通过在Shell上输入来获取编码列表:

# locale -a | grep utf