[C++ Builder]Кодировка

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by S0ldeR, 4 Sep 2010.

  1. S0ldeR

    S0ldeR Banned

    Joined:
    12 Jul 2010
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Делаю пост запрос в ВК , в посте должно передаваться
    1 слово на русском языке , делал сначала так

    r->Add(слово="мама")
    IdHTTP->Post("сайт контакта",r);

    Но на контакт приходят ?????? , если же напишу англ буквы то все ок , в чем дело?
     
  2. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    s = AnsiToUtf8(s);

    PS: Юзай сокеты
     
  3. S0ldeR

    S0ldeR Banned

    Joined:
    12 Jul 2010
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Сделал так

    Form55->Memo13->Lines->Strings[rand]=AnsiToUtf8(Form55->Memo13->Lines->Strings[rand] );

    r->Add(Form55->Memo13->Lines->Strings[rand]);
    I->Post("vk.ru",r);

    и все равно доходит ???? ????
     
  4. rudi

    rudi Active Member

    Joined:
    3 Jun 2010
    Messages:
    492
    Likes Received:
    187
    Reputations:
    5
    Если builder 6
    идешь во вкладку FastNet
    и кидаешь на форму элемент NMURL
    после чего делаешь так

    char text[]="это текст";
    char NewText[256];
    NMURL1->InputString = UTF8Encode(text);
    strcpy(NewText, NMURL1->Encode.c_str());

    и вуаля, у тебя в NewText находиться текст в URL кодировке
     
  5. S0ldeR

    S0ldeR Banned

    Joined:
    12 Jul 2010
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    У меня 2009(
     
  6. rudi

    rudi Active Member

    Joined:
    3 Jun 2010
    Messages:
    492
    Likes Received:
    187
    Reputations:
    5
    тогда юзай этот код

    char Text[]="Это текст";
    char NewText[256];

    char_to_url(Text, NewText, true);


    а это функция для конвертации
    тока не забудь её прототип обявить
    PHP:
    void char_to_url(char *Sourcechar *Destbool Type)
    {

          
    //---------
          
    UTF8String S;
          if(
    Type)
             
    UTF8Encode(Source);
          else
             
    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;  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(Destch);
             }
            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(Destbf);
                 };
    /*End of SWITCH*/
              
    }
            
    ptr++;
          }
    }
     
  7. S0ldeR

    S0ldeR Banned

    Joined:
    12 Jul 2010
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    S = UTF8Encode(Source);
     
    #7 S0ldeR, 4 Sep 2010
    Last edited: 4 Sep 2010
  8. rudi

    rudi Active Member

    Joined:
    3 Jun 2010
    Messages:
    492
    Likes Received:
    187
    Reputations:
    5
    попробуй подключи что нить из этого

    #include <vcl.h>
    #include <iostream>
    #include <stdio.h>
    #include <windows.h>
     
  9. S0ldeR

    S0ldeR Banned

    Joined:
    12 Jul 2010
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    кое что поправил, слово Проверка перевела в %cf%f0%ee%e2%e5%f0%ea%e0 это правильно?
     
  10. rudi

    rudi Active Member

    Joined:
    3 Jun 2010
    Messages:
    492
    Likes Received:
    187
    Reputations:
    5
    вроде да
    а что там ты подправил?
     
    #10 rudi, 4 Sep 2010
    Last edited: 4 Sep 2010
  11. S0ldeR

    S0ldeR Banned

    Joined:
    12 Jul 2010
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Вот токо ме надо

    char Text[]=Form55->Memo13->Lines->Strings[rand]; вот такой подставлять а билдер выдает [BCC32 Error] Unit1.cpp(1730): E2034 Cannot convert 'UnicodeString' to 'char[]'
     
  12. rudi

    rudi Active Member

    Joined:
    3 Jun 2010
    Messages:
    492
    Likes Received:
    187
    Reputations:
    5
    а так?

    char Text[]=Form55->Memo13->Lines->Strings[rand].c_str();
     
  13. S0ldeR

    S0ldeR Banned

    Joined:
    12 Jul 2010
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    А так[BCC32 Error] Unit1.cpp(1730): E2034 Cannot convert 'wchar_t *' to 'char[]'
     
  14. rudi

    rudi Active Member

    Joined:
    3 Jun 2010
    Messages:
    492
    Likes Received:
    187
    Reputations:
    5
    а может так?
    char Text[256];
    strcpy(Text, Form55->Memo13->Lines->Strings[rand].c_str());

    там нажми после Strings[rand] точку ., и напиши с_
    должны подсказки вылетать, чтото типа c_bstr() вроде
    в общем с буквой b нету ?
     
  15. good_man

    good_man New Member

    Joined:
    24 May 2010
    Messages:
    112
    Likes Received:
    3
    Reputations:
    -2
    String str="проверка";

    Memo1->Lines->Add(UTF8Encode(str));

    все время так делаю. билдер 6.0

    раскодировать: UTF8Decode(str)
     
    #15 good_man, 4 Sep 2010
    Last edited: 4 Sep 2010
  16. S0ldeR

    S0ldeR Banned

    Joined:
    12 Jul 2010
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    РуДИ

    %db - как делает твоя функция
    %D0%AB - как надо

    Это Буква "Ы"

    Просто тупо вывел слово Проверка
     
  17. good_man

    good_man New Member

    Joined:
    24 May 2010
    Messages:
    112
    Likes Received:
    3
    Reputations:
    -2
    >>Просто тупо вывел слово Проверка.

    недолжно поидее. ты наверное делаешь так:

    String str="проверка";
    UTF8Encode(str);
    Memo1->Lines->Add(str);

    нэ?

    если да то так неполучится.

    можно так:
    String str="проверка";
    String encode=UTF8Encode(str);
    Memo1->Lines->Add(encode);

    у меня выводит: проверка при отправке вконтакт придет "проверка"
     
    #17 good_man, 4 Sep 2010
    Last edited: 4 Sep 2010
  18. rudi

    rudi Active Member

    Joined:
    3 Jun 2010
    Messages:
    492
    Likes Received:
    187
    Reputations:
    5

    слово дым
    конвертирует в
    %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 символа
     
    #18 rudi, 4 Sep 2010
    Last edited: 4 Sep 2010
  19. good_man

    good_man New Member

    Joined:
    24 May 2010
    Messages:
    112
    Likes Received:
    3
    Reputations:
    -2
    ТС попробуй так еще:

    WideString str="проверка";

    Memo1->Lines->Add(UTF8Encode(str));
     
  20. S0ldeR

    S0ldeR Banned

    Joined:
    12 Jul 2010
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0

    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
     
    #20 S0ldeR, 4 Sep 2010
    Last edited: 4 Sep 2010