Делаю пост запрос в ВК , в посте должно передаваться 1 слово на русском языке , делал сначала так r->Add(слово="мама") IdHTTP->Post("сайт контакта",r); Но на контакт приходят ?????? , если же напишу англ буквы то все ок , в чем дело?
Сделал так Form55->Memo13->Lines->Strings[rand]=AnsiToUtf8(Form55->Memo13->Lines->Strings[rand] ); r->Add(Form55->Memo13->Lines->Strings[rand]); I->Post("vk.ru",r); и все равно доходит ???? ????
Если builder 6 идешь во вкладку FastNet и кидаешь на форму элемент NMURL после чего делаешь так char text[]="это текст"; char NewText[256]; NMURL1->InputString = UTF8Encode(text); strcpy(NewText, NMURL1->Encode.c_str()); и вуаля, у тебя в NewText находиться текст в URL кодировке
тогда юзай этот код char Text[]="Это текст"; char NewText[256]; char_to_url(Text, NewText, true); а это функция для конвертации тока не забудь её прототип обявить PHP: void char_to_url(char *Source, char *Dest, bool Type) { //--------- UTF8String S; if(Type) S = UTF8Encode(Source); else S = Source; //--------- char buff[20], bf[20]; char *ptr = (char *)S.c_str(); char ch[10]; size_t len = strlen(ptr); Dest[0] =0; for(size_t x=0; x < len; x++) { if(*ptr == '\r') { ptr++; continue; } else if((*ptr >= 'A' && *ptr <= 'Z') || (*ptr >= 'a' && *ptr <= 'z') || *ptr =='*' || *ptr =='@' || *ptr =='.' || *ptr =='_' || *ptr =='-' || (*ptr >='0' && *ptr <='9')) { sprintf(ch, "%c\0", *ptr); strcat(Dest, ch); } else { switch (*ptr) { case '\n': strcat(Dest, "%0D%0A\0"); break; case '"': strcat(Dest, "%22\0"); break; case '#': strcat(Dest, "%23\0"); break; case '~': strcat(Dest, "~\0"); break; case '%': strcat(Dest, "%25\0"); break; case '&': strcat(Dest, "%26\0"); break; case '\'': strcat(Dest, "%27\0"); break; case '*': strcat(Dest, "%2a\0"); break; case ',': strcat(Dest, "%2c\0"); break; case ':': strcat(Dest, "%3a\0"); break; case ';': strcat(Dest, "%3b\0"); break; case '<': strcat(Dest, "%3c\0"); break; case '>': strcat(Dest, "%3e\0"); break; case '?': strcat(Dest, "%3f\0"); break; case '[': strcat(Dest, "%5b\0"); break; case ']': strcat(Dest, "%5d\0"); break; case '^': strcat(Dest, "%5e\0"); break; case '`': strcat(Dest, "%60\0"); break; case '{': strcat(Dest, "%7b\0"); break; case '|': strcat(Dest, "%7c\0"); break; case '}': strcat(Dest, "%7d\0"); break; case ' ': strcat(Dest, "%20\0"); break; case '(': strcat(Dest, "%28\0"); break; case ')': strcat(Dest, "%29\0"); break; case '!': strcat(Dest, "%21\0"); break; case '+': strcat(Dest, "%2B\0"); break; case '$': strcat(Dest, "%24\0"); break; case '=': strcat(Dest, "%3D\0"); break; case '\\': strcat(Dest, "%5C\0"); break; case '/': strcat(Dest, "%2F\0"); break; default: sprintf(buff, "%x\0", *ptr); //sprintf(buff, "%.2x\0", *ptr); sprintf(bf, "%%%s\0", &buff[6]); strcat(Dest, bf); };/*End of SWITCH*/ } ptr++; } }
попробуй подключи что нить из этого #include <vcl.h> #include <iostream> #include <stdio.h> #include <windows.h>
Вот токо ме надо char Text[]=Form55->Memo13->Lines->Strings[rand]; вот такой подставлять а билдер выдает [BCC32 Error] Unit1.cpp(1730): E2034 Cannot convert 'UnicodeString' to 'char[]'
а может так? char Text[256]; strcpy(Text, Form55->Memo13->Lines->Strings[rand].c_str()); там нажми после Strings[rand] точку ., и напиши с_ должны подсказки вылетать, чтото типа c_bstr() вроде в общем с буквой b нету ?
String str="проверка"; Memo1->Lines->Add(UTF8Encode(str)); все время так делаю. билдер 6.0 раскодировать: UTF8Decode(str)
>>Просто тупо вывел слово Проверка. недолжно поидее. ты наверное делаешь так: String str="проверка"; UTF8Encode(str); Memo1->Lines->Add(str); нэ? если да то так неполучится. можно так: String str="проверка"; String encode=UTF8Encode(str); Memo1->Lines->Add(encode); у меня выводит: проверка при отправке вконтакт придет "проверка"
слово дым конвертирует в %d0%b4%d1%8b%d0%bc тока что проверил я тоесть 1 буква имеет 2 символа а слово проверка мой код сконвертировал в это %d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b0 я незнаю что ты правил в меом коде но код должен выводить на 1 русс символ - 2 символа
char Text[]="Ы"; char NewText[256]; char_to_url(Text, NewText, true); Memo->Text=NewText; String str="Проверка"; Memo->Lines->Add(UTF8Encode(str)); WideString strf="Проверка"; Memo->Lines->Add(UTF8Encode(strf)); Ответы %db Проверка Проверка А билдер у меня 9