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);
- 字符串+= (字符)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
s。 相反,您似乎担心字符范围 127-192 等。
我认为您编写的代码可能试图将 Unicode 代码点转换为 UTF-8(275 -> C493)。
相关文章:
- 如何存储 unicode 字符并将其输出到文件?
- C++:打印 Unicode 字符
- 在 Windows 中使用 boost::p rogram_options 从命令行参数读取 Unicode 字符
- 获取Unicode字符C++的十进制值
- 用wchar_t处理 unicode 字符好吗?它不会引起任何问题吗?
- C++:如何将 unicode 字符打印到文本文件
- 动态计算 unicode 字符
- 如何将整数转换为 unicode 字符
- C++20 中的严格别名规则是否允许标准 c++ unicode 字符和下划线类型之间"reinterpret
- MessageBox打印来自TCHAR缓冲区的额外Unicode字符
- 如何将小数NCR转换为Unicode字符(C )
- SQLGetPrivateProfileString 错误地读取 Unicode 字符
- 将 Unicode 字符/字符串写入文件
- 将 Unicode 字符存储在.txt文件中的新行中
- 从终端 C++ 中的字符串中打印出 unicode 字符
- Unicode 字符分类与 boost::locale
- 字符数组中的滤波器unicode字符
- Unicode 字符问题/转换参数
- 从包含Unicode字符的文件中读取
- 从ASCII到Unicode字符代码的转换(FreeType2)