我从包含 utf-8 字符(如 Ž,ć)和另一个库(我无法将其存储在 char[] 中,而不是 w_char 中)的服务器文本(几个单词)中获取。我需要这些词作为 URL 中的参数传递(在移动客户端上打开 webview)。我尝试了 urlencode(我拥有的在 ascii 上运行良好的函数),但它编码为 ascii 并且 Javascript 无法将其解码回使用。如何将 char* 转换为 utf 字符数组和 url 编码 utf ?
std::string urlencode(const std::string &c)
{
std::string escaped="";
int max = c.length();
for(int i=0; i<max; i++)
{
if ( (48 <= c[i] && c[i] <= 57) ||//0-9
(65 <= c[i] && c[i] <= 90) ||//abc...xyz
(97 <= c[i] && c[i] <= 122) || //ABC...XYZ
(c[i]=='~' || c[i]=='!' || c[i]=='*' || c[i]=='(' || c[i]==')' || c[i]=='\'')
)
{
escaped.append( &c[i], 1);
}
else
{
escaped.append("%");
escaped.append( char2hex(c[i]) );//converts char 255 to string "ff"
}
}
return escaped;
}
std::string char2hex( char dec )
{
char dig1 = (dec&0xF0)>>4;
char dig2 = (dec&0x0F);
if ( 0<= dig1 && dig1<= 9) dig1+=48; //0,48inascii
if (10<= dig1 && dig1<=15) dig1+=97-10; //a,97inascii
if ( 0<= dig2 && dig2<= 9) dig2+=48;
if (10<= dig2 && dig2<=15) dig2+=97-10;
std::string r;
r.append( &dig1, 1);
r.append( &dig2, 1);
return r;
}