我正在尝试使用tinyxml2-ex
库读取一些XML数据。
当我尝试使用它的特定API调用:
const CString strNameToUse(tinyxml2::text(pAssign).c_str());
生成的字符串会丢失重音等内容。最后,我已经恢复了我对UTF8处理的原始方法:
const CString strNameToUse(CA2CT(pAssign->GetText(), CP_UTF8));
这很好。有人知道为什么tinyxml2-ex::text
方法失败了吗?注意,允许使用tinyxml2
命名空间。
所引用的库正在使用std::string
,并且这样做:
// helper function to get element text as a string, blank if none
inline std::string text (const XMLElement * element)
{
if (!element)
throw XmlException ("null element"s);
if (auto value = element -> GetText())
return std::string (value);
else
return ""s;
}
库作者解释(GitHub讨论:
这是因为
tixml2ex::text
(参见tixml2ex.h
中的第465行)这样做:
if (auto value = element -> GetText())
return std::string (value);
将腐败以外的任何字符串包含字符的ASCII 127。