可能重复:
How to convert pugi::char_t* to string
如何将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*。
谢谢
发布于 2011-08-21 12:31:46
我有个主意。粗版本涉及修改库,这可能会在将来破坏一些内容,但让我们从以下几个方面开始:
我们已经具备了以下两项职能:
std::string as_utf8(const wchar_t* str);
std::wstring as_wide(const char* str);
我们还知道pugi::char_t
要么是char
,要么是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_t
已经是char
,那么这将被完全优化(当然,假设编码已经是UTF-8,而不是任何其他8位编码!)
(您还应该提供使用std::string
和std::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); }
https://stackoverflow.com/questions/7140793
复制