如何记录带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::toUTF16
将 std::wstring
转换为 std::string
,例如:
std::string str;
Poco::UnicodeConverter::toUTF16(str, gameName);
logger.information("GameName: %s", str);
希望对您有所帮助。
我正在使用 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::toUTF16
将 std::wstring
转换为 std::string
,例如:
std::string str;
Poco::UnicodeConverter::toUTF16(str, gameName);
logger.information("GameName: %s", str);
希望对您有所帮助。