如何记录带Poco::Logger的unicode字符串?

How to log unicode character string with Poco::Logger?

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

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

对于字符串:

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

对于字符:

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

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

参见 format

然而 Poco 有一个 UnicodeConverter class。

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

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

希望对您有所帮助。