#include <iostream>
#include <sstream>
#include <conio.h>
#include <string>
using namespace std;
void main()
{
string str = "привет";
stringstream out;
for(int i = 0; i < str.length(); ++i)
{
unsigned int t = str;
out << '%' << hex << t%256;
}
cout << out.str();
_getch();
}
Преобразовать строку для передачи серверу в виде URL
Например, чтобы "привет" стало "%EF%F0%E8%E2%E5%F2"
Цитата: Timmy!!
Подскажите кто знает.
Например, чтобы "привет" стало "%EF%F0%E8%E2%E5%F2"
Например, чтобы "привет" стало "%EF%F0%E8%E2%E5%F2"
на C++ я сделал так:
Код:
там же после % идёт просто код символа в ASCII таблице, но в 16-ричной системе счисления
запрос формируется гугл преводчику и он не понимает такой формат "%EF%F0%E8%E2%E5%F2". зато если отправить "%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82" то все работает. помогите разобратся как преобразовать. может все дело в кодировке?
Да, все дело в ней. Это utf-8
Код:
// функция преобразовывает строку для передачи серверу в виде URL
// строка кодируется в utf8
String urlencode(const WideString wstr)
{
UTF8String utf8str;
String url;
utf8str = UTF8Encode(wstr);
if (utf8str.Length() > 0) {
for (int i = 1; i <= utf8str.Length(); ++i) {
String tmp = IntToHex(utf8str, 2);
url += "%";
url += tmp[tmp.Length() - 1];
url += tmp[tmp.Length()];
}
}
return url;
}
// строка кодируется в utf8
String urlencode(const WideString wstr)
{
UTF8String utf8str;
String url;
utf8str = UTF8Encode(wstr);
if (utf8str.Length() > 0) {
for (int i = 1; i <= utf8str.Length(); ++i) {
String tmp = IntToHex(utf8str, 2);
url += "%";
url += tmp[tmp.Length() - 1];
url += tmp[tmp.Length()];
}
}
return url;
}