2

可能重复:
如何将 pugi::char_t* 转换为字符串

如何将 pugi:char_t* 类型转换为 wchar_t 字符串?

我想将 child_value() 的结果与一些 utf8 字符串进行比较,如果没有这种转换,我就无法做到这一点。

for (pugi::xml_node_iterator it = words.begin(); it != words.end(); ++it)
    {
        wchar_t* wordValue = it->child("WORDVALUE").child_value();
    }

此分配返回错误,因为右侧是 pugi::char_t* 而左侧是 whar_t*

谢谢

4

1 回答 1

0

这是一个想法。粗略的版本涉及修改库,这可能会在未来破坏一些东西,但让我们从这个开始:

我们已经有了这两个函数:

std::string as_utf8(const wchar_t* str);
std::wstring as_wide(const char* str);

我们也知道pugi::char_tcharor wchar_t。因此,为了调用转换函数,我们pugi::char_t只需要一个重载,您可以将其添加到标题中:

std::string as_utf8(const char* str) { return str; }
std::wstring as_wide(const wchar_t* str) { return str; }

现在你可以这样写:

pugi::char_t * mystr = get_magic_string();
std::string mystrU8 = as_utf8(mystr);

由于重载,这将在两种编译器设置中都有效,如果pugi::char_tis already char,那么这将被完全优化(当然假设编码已经是 UTF-8,而不是任何其他 8 位编码!)。

(您还应该提供采用的重载std::stringstd::wstring参数来支持相同的魔力pugi::string_t。)


如果您担心污染库,请编写自己的包装器:

std::string my_utf8(const char * str) { return str; }
std::string my_utf8(const wchar_t * str) { return as_utf8(str); }
于 2011-08-21T20:31:46.683 回答