为什么使用 tinyxml2-ex::text 会返回损坏的文本?

Why is using tinyxml2-ex::text returning corrupted text?

提问人:Andrew Truckle 提问时间:7/4/2022 最后编辑:Andrew Truckle 更新时间:7/5/2022 访问量:56

问:

我正在尝试使用 tinyxml2-ex 库来读取一些 XML 数据。

当我尝试使用它的特定 API 调用时:

const CString strNameToUse(tinyxml2::text(pAssign).c_str());

生成的字符串会丢失重音等内容。最后,我恢复了原来的 UTF8 处理方法:

const CString strNameToUse(CA2CT(pAssign->GetText(), CP_UTF8));

这工作正常。有谁知道为什么这种方法会失败?请注意,允许使用命名空间。tinyxml2-ex::texttinyxml2


引用的库正在使用并这样做: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;
}

visual-c++ tinyxml2

评论


答:

0赞 Andrew Truckle 7/5/2022 #1

库作者解释道(GitHub 讨论

这是因为(参见第 465 行)这样做:tixml2ex::texttixml2ex.h

if (auto value = element -> GetText())
    return std::string (value);

这将损坏任何包含 ASCII 127 之外字符的字符串。