簡體   English   中英

C ++通過utf-8值獲取Unicode字符

[英]C++ get unicode character by it's utf-8 value

我對c ++不太滿意,我正在嘗試創建將URL編碼的字符串轉換為常規字符串的函數。

但是我得到的結果很奇怪,例如,%C4%93(十進制50323)應該是utf-8符號ē ,但是當我在控制台中打印時,卻得到了ō 我試過了:

  • 字符串+ = static_cast(character_integer_value);
  • 字符串+ =(char)character_integer_value;
  • 字符串+ = character_integer_value;

但是這些都沒有給我期望的輸出。

你能指出我做錯了什么嗎?

std::string myUrldecode(const std::string& original) {
    std::string s = original;
    std::string tmp0 = "";
    int tmp1 = 0;
    int tmp2 = 0;
    std::string decoded = "";

    for (string::size_type i = s.find("%");
        i != string::npos;
        i = s.find("%"))
    {
        if(i > 0){
            decoded+= tmp0;
            tmp0 = "";
            tmp2 = 0;
        }
        decoded+= s.substr(0, i);
        s.erase(0, i);

        tmp0+= s.substr(0, 2);
        tmp1 = strtol(s.substr(1, 2).c_str(), nullptr, 16);

        if(tmp1 >= 20 && tmp1 < 127){
            decoded+= static_cast<char>(tmp1);
            s.erase(0, 3);
            tmp0 = "";
        }
        else if(tmp1 >= 192 && tmp1 < 223){
            tmp2 = tmp1;
            s.erase(0, 3);
        }
        else if(tmp1 >= 128 && tmp1 <= 191 && tmp2 > 192){
            tmp1+= tmp2 * 256;
            decoded+= tmp1;
            s.erase(0, 3);
            tmp0 = "";
        }
        else{
            s.erase(0, 3);
        }
    }
    decoded+= tmp0;
    decoded+= s;
    return decoded;
}

我正在使用帶有GCC 4.9.2 32位的Dev-C ++ 5.11來編譯該代碼。

你完全錯了。

“%C4%93” ē的UTF-8編碼,因此您只需要將數字(C4 + 93)轉換為char 相反,您似乎擔心127-192等字符范圍。

我認為您編寫的代碼可能試圖將Unicode代碼點轉換為UTF-8(275-> C493)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM