将Unicode值分配给char

时间:2014-07-16 15:19:28

标签: c++

我的代码包含一个循环,其中检查std::string的每个字符,将其分配给char变量,该变量在-1 >= c >= 255时失败。

这是来自JSON解析器类的方法,它不是我的:

static std::string UnescapeJSONString(const std::string& str)
{
    std::string s = "";

    for (int i = 0; i < str.length(); i++)
    {
        char c = str[i]; // << HERE FAILS WHEN 'É' CHARACTER
        if ((c == '\\') && (i + 1 < str.length()))
        {
            int skip_ahead = 1;
            unsigned int hex;
            std::string hex_str;

            switch (str[i+1])
            {
                case '"' :  s.push_back('\"'); break;
                case '\\':  s.push_back('\\'); break;
                case '/' :  s.push_back('/'); break;
                case 't' :  s.push_back('\t'); break;
                case 'n' :  s.push_back('\n'); break;
                case 'r' :  s.push_back('\r'); break;
                case 'b' :  s.push_back('\b'); break;
                case 'f' :  s.push_back('\f'); break;
                case 'u' :  skip_ahead = 5;
                    hex_str = str.substr(i + 4, 2);
                    hex = (unsigned int)std::strtoul(hex_str.c_str(), nullptr, 16);
                    s.push_back((char)hex);
                    break;

                default: break;
            }

            i += skip_ahead;
        }
        else
            s.push_back(c);
    }

    return Trim(s);
}

如何为char分配Unicode值?在这种情况下,值为É,代码未准备好接收此类字符。

这包含在dll库中,并且给出了这个错误:

enter image description here

1 个答案:

答案 0 :(得分:0)

std :: string不使用Unicode。这是显而易见的,因为有一个方法c_str,它允许您从std :: string获取一个char数组。

回答你的问题,你的测试是错误的:

-1 >= c && c >= 255

应该是:

-1 <= c && c <= 255

但是,由于char已签名,因此无法在255附近获得c。 如果你想获得255个char,那么它需要

unsigned char

这不会让你达到-1。

在这里阅读char *:

http://www.cplusplus.com/doc/tutorial/variables/

在这里查看char数组:

http://www.cplusplus.com/doc/tutorial/ntcs/

在这里看到std :: string:

http://www.cplusplus.com/reference/string/string/