【问题标题】:Using utf-8 characters in log4cxx在 log4cxx 中使用 utf-8 字符
【发布时间】:2012-12-07 02:40:05
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ logging log4cxx


    【解决方案1】:

    你可以使用

    setlocale(LC_CTYPE, "UTF-8");
    

    只设置字符编码,而不更改任何其他关于语言环境的信息。

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题并搜索和搜索。我找到了这篇文章,它可能有用,但我不喜欢 setlocaleish 解决方案。所以我做了更多的研究,终于解决了。

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

      log4cxx中添加另外两个配置选项:

      ./configure --prefx=blabla --with-apr=blabla --with-apr-util=blabla --with-charset=utf-8 --with-logchar=utf-8
      

      希望这将帮助任何需要它的人。

      【讨论】:

        【解决方案3】:

        一种解决方案是使用

        setlocale(LC_ALL, "en_US.UTF-8");
        

        在我的主要功能中。这对我来说没问题,但是如果您想要更多可本地化的应用程序,这可能会变得难以跟踪/使用。

        【讨论】:

          【解决方案4】:

          第一个答案对我不起作用,第二个答案超出了我的要求。所以我结合了两个答案:

          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
          

          【讨论】:

            猜你喜欢
            • 2018-05-17
            • 2014-04-06
            • 1970-01-01
            • 2022-11-12
            • 1970-01-01
            • 1970-01-01
            • 2014-02-26
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多