кодировка Unicod - преобразование в читабельный вид

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by rudi, 16 Aug 2010.

  1. rudi

    rudi Active Member

    Joined:
    3 Jun 2010
    Messages:
    487
    Likes Received:
    184
    Reputations:
    5
    привет
    юзая builder с++
    получаю HTML страницу
    там есть русские строки в кодировке я так понимаю юникода
    PHP:
    "\u041f\u0430\u0440\u0430\u0433\u0432\u0430\u0439"
    Это слово
    Парагвай
    Как мне привести символы в читабельный вид и занести в переменную типа char

    Если я делаю так, то при просмотре переменной buff дебагером -она читается на русском языке
    PHP:
    char buff[]="\u041f\u0430\u0440\u0430\u0433\u0432\u0430\u0439";
    а если я копирую текст крякозябры в Memo
    то потом оттуда пытаюсь привести в читабельный вид
    не получается

    Может кто сталкивался?
     
  2. rudi

    rudi Active Member

    Joined:
    3 Jun 2010
    Messages:
    487
    Likes Received:
    184
    Reputations:
    5
    Решил сам написать
    но буду рад увидеть и ваши варианты

    Мой вариант не претендует на самое молниеностное выполнение
    но чтото настругал вот :D

    PHP:
    //Конвертация unicode  в русские символы
    void Convert_Unicode_Russ(char *Sourcechar *Dest)
    {
         
    size_t len;
         
    char Table_a[]="абвгдеёжзийклмнопрстуфхцчшьщъыэюя";
         
    char Table_A[]="АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЬЩЪЫЭЮЯ";
    const 
    char *code_alfa[]={
    "\\u0430",
    "\\u0431",
    "\\u0432",
    "\\u0433",
    "\\u0434",
    "\\u0435",
    "\\u0451",
    "\\u0436",
    "\\u0437",
    "\\u0438",
    "\\u0439",
    "\\u043a",
    "\\u043b",
    "\\u043c",
    "\\u043d",
    "\\u043e",
    "\\u043f",
    "\\u0440",
    "\\u0441",
    "\\u0442",
    "\\u0443",
    "\\u0444",
    "\\u0445",
    "\\u0446",
    "\\u0447",
    "\\u0448",
    "\\u044c",
    "\\u0449",
    "\\u044a",
    "\\u044b",
    "\\u044d",
    "\\u044e",
    "\\u044f"
    };

    const 
    char *code_ALFA[]={
    "\\u0410",
    "\\u0411",
    "\\u0412",
    "\\u0413",
    "\\u0414",
    "\\u0415",
    "\\u0401",
    "\\u0416",
    "\\u0417",
    "\\u0418",
    "\\u0419",
    "\\u041a",
    "\\u041b",
    "\\u041c",
    "\\u041d",
    "\\u041e",
    "\\u041f",
    "\\u0420",
    "\\u0421",
    "\\u0422",
    "\\u0423",
    "\\u0424",
    "\\u0425",
    "\\u0426",
    "\\u0427",
    "\\u0428",
    "\\u042c",
    "\\u0429",
    "\\u042a",
    "\\u042b",
    "\\u042d",
    "\\u042e",
    "\\u042f",
    };

        
    len strlen(Source);
        
    char ch[10];
        if(
    len 1) return;
        
    strcpy(DestSource);
        for(
    int i=033i++)
          {
             while(
    strstr(Destcode_alfa[i]))
               {
                   
    sprintf(ch"%c\0"Table_a[i]);
                   
    replace(Dest, (char *)code_alfa[i], ch);
               }    
             while(
    strstr(Destcode_ALFA[i]))
               {
                   
    sprintf(ch"%c\0"Table_A[i]);
                   
    replace(Dest, (char *)code_ALFA[i], ch);
               }
          }
    }

    PHP:
    //Замена куска OldStr в строке source на кусок NewStr
    bool replace(char *sourcechar *OldStrchar *NewStr)
    {
      
    char *ptr, *pt, *bf;

      if((
    ptr strstr(sourceOldStr)) ==NULL)
         return 
    0;

      
    pt =ptr;
      
    ptr +=strlen(OldStr);
      
    bf = new char[strlen(ptr)+1];
      
    strcpy(bfptr);
      *
    pt ='\0';
      
    strcat(ptNewStr);
      
    strcat(ptbf);
      
    delete []bf;
      return 
    true;
    }
     
    #2 rudi, 16 Aug 2010
    Last edited: 16 Aug 2010
    1 person likes this.