0

我已经使用 cpprestsdk 工作了很长时间,直到今天还没有遇到这个问题。我不确定发生了什么变化,但是在调试了一段时间后,我对为什么会发生这种情况感到困惑。
将 utf-8 字符串转换为 wchar_t 以与其余调用一起使用时,我收到错误“UTF-8 字符串字符永远不能以 10xxxxxx 开头”抛出此错误的 cpp 文件显示在第 280 行:https://github.com/Microsoft/cpprestsdk/blob/master/Release/src/utilities/asyncrt_utils.cpp

我将代码复制到我的程序中,试图找出发生这种情况的原因,这就是我所拥有的: 注意:*tmp 是字符串向量的迭代器

`std::string str = *tmp->safe; //*tmp->safe == "WW-Department-Zone-OS" 
const size_t sSize = str.size();
const char* const sData = str.data();
size_t result{ sSize };
for (size_t index = 0; index < sSize;) {
    const char c{ sData[index++] };
    if ((c & 0x40) == 0)
        std::cout << "String starts with 10xxxxxx\n";
}`

使用断点时,我注意到当 'c' == '-' 字符及其后的字符为 -40 'Ø' 时会引发错误。如果有人对为什么会发生这种情况有任何意见,将不胜感激。

4

1 回答 1

0

也许有点太晚了,但这个问题的解决方案很奇怪,但我会发布分析器,因为在这个论坛上找到它比在其他论坛上要简单得多。我在 VS 2019 中遇到了同样的问题,在 Qt creator 中也遇到了同样的问题,但我终于找到了答案。

如此处所述:https ://github.com/microsoft/cpprestsdk/issues/1142 在最后一条消息中,您应该使用 cpprest_2_10d.lib 进行调试模式和 cpprest_2_10.lib 发布。如果您使用 vcpkg 安装 cpprestsdk,则库的调试版本位于“debug/lib”目录中,而用于 realease 的库仅位于“lib”目录中。

感谢 github.com 成员发布答案,它确实节省了我的时间。

于 2021-03-18T15:15:54.157 回答