[英]C++ get unicode character by it's utf-8 value
我對c ++不太滿意,我正在嘗試創建將URL編碼的字符串轉換為常規字符串的函數。
但是我得到的結果很奇怪,例如,%C4%93(十進制50323)應該是utf-8符號ē ,但是當我在控制台中打印時,卻得到了ō 。 我試過了:
但是這些都沒有給我期望的輸出。
你能指出我做錯了什么嗎?
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.