【问题标题】:How to log unicode character string with Poco::Logger?如何使用 Poco::Logger 记录 unicode 字符串?
【发布时间】:2017-09-25 05:06:25
【问题描述】:

我正在使用POCO C++ 库版本 1.7.5 从数据库中加载一些记录并使用 POCO 记录器实用程序将它们记录到文件中。其中一个字符串记录是 unicode 格式,我保存在 std::wstring 中。我找不到如何使用 POCO 记录器记录 std::wstring

Poco::Logger logger;
std::wstring gameName;
...
logger.information("GameName: %s", gameName.c_str());

结果是:

2017-04-27 11:47:28.438 - GameName: [ERRFMT]

如何正确登录std::wstring

【问题讨论】:

    标签: c++ logging poco-libraries


    【解决方案1】:

    Poco 不直接支持 wstring 日志记录,Poco 的 format 函数使用类型安全格式。

    format

    但是 Poco 有一个 UnicodeConverter 类。

    因此您可以通过Poco::UnicodeConverter::toUTF16std::wstring 转换为std::string,例如:

    std::string str;
    Poco::UnicodeConverter::toUTF16(str, gameName);
    logger.information("GameName: %s", str);
    

    我希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      假设 logger.information(); 与 printf 一样工作,您可以尝试使用 %ls

      对于字符串:

      logger.information("GameName: %ls", gameName);
      

      对于字符:

      logger.information("GameName: %lc", gameName);
      

      【讨论】:

      • 这不起作用。我试过了,结果是一样的。我也试过%S,它只打印S
      猜你喜欢
      • 2017-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-19
      • 2018-01-01
      • 2018-05-10
      • 2010-11-22
      • 2018-09-15
      相关资源
      最近更新 更多