- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Name: Xit
Subject: Re: Url

Максим, большое спасибо вам, что помагаете нам с настройкой или хотя бы 
морально поддерживаете...

1. Продолжая тему урлов... ещё встретился с такой проблемой, когда симолы 
некоторые русские перекодируются в #&ХХХХ (вместо иксов английские буквы) и 
потом в ссылках они так и выводятся в поиске, а браузер их не понимает.

2. Ну вот пример такой... индексирую mp3 на двух разных сайтах, везде в 
конфигах поставил кодировку windows-1251, но всё равно что в логах, что потом 
при поиске вместо нормальных русских букв вижу такие надписи: 
"Г.Г.Г.Г.Г.Г.Г.Г." :) Вспоминаю про UTF.... разбираю код id3.c:

        utf8_cs = from_cs = DpsGetCharSet("utf-8");
        switch(charset) {
        case 0: from_cs = DpsGetCharSet("iso-8859-1"); break;
        case 1:
          if (val[0] == 0xFE && val[1] == 0xFF) from_cs = 
DpsGetCharSet("utf-16be");
          else if (val[0] == 0xFF && val[1] == 0xFE) from_cs = 
DpsGetCharSet("utf-16le");
          else return DPS_OK; /* wrong sequence for UTF16 with BOM */
          break;
        case 2: from_cs = DpsGetCharSet("utf-16be"); break;
        case 3: /* utf-8 - no recoding required */ break;
        }

        if((Sec=DpsVarListFind(&Doc->Sections,name))){
                DPS_TEXTITEM    Item;
                bzero((void*)&Item, sizeof(Item));

                if (charset != 3) {
                  DpsConvInit(&to_utf, from_cs, utf8_cs, 
Indexer->Conf->CharsToEscape, DPS_RECODE_HTML);
                  value = (char*)DpsMalloc(14 * len + 2);
                  if ( value == NULL) return DPS_OK;
                  DpsConv(&to_utf, value, 14 * len, val, len);
                } else value = val;
                value[to_utf.obytes] = value[to_utf.obytes + 1] = 0;

                Item.section = Sec->section;
                Item.str = value;
                Item.section_name = name;
                Item.len = to_utf.obytes;
                DpsTextListAdd(&Doc->TextList, &Item);
                DpsLog(Indexer, DPS_LOG_DEBUG, "Added: %s:%s", name, value);
                if (charset != 3) DPS_FREE(value);

и вроде как всё становится ясно.... но почему именно в UTF? она потом так ведь 
и отображается в UTF'е, а не в 1251.

Если продолжать эту тему, то расставив дебаги дополнительные в коде, я 
обнаружил что в большинстве mp3 файлах, даже при вот таком варианте "case 0: 
from_cs = DpsGetCharSet("iso-8859-1"); break;" присутствуют русские буквы... 
наверно правили в WinAmp, он прописывал латинскую кодировку, но русские буквы 
позволял вбивать... и получается несоответствии стандартам. У вас, в этом 
плане, в программе косяков нету, но по моему хорошо очень помог бы параметр в 
конфиге о том, что не нужно преобразовывать... я вот вместо преобразований 
сделал примерно так:

                char *value;

                value = (char *) malloc(len + 1);

                memcpy((void *) value, (void *) val, len);

                value[len] = '\0';

                add_var(Indexer, Doc, name, value);

                DpsLog(Indexer, DPS_LOG_DEBUG, "Added: %s:%s", name, value);

                free(value);


и всё работает
- - - - - - - - - - - - - - - - - - - - - - - - - - - -

Read the full topic here:
http://www.dataparksearch.org/cgi-bin/simpleforum.cgi?fid=05;topic_id=1179478317

Reply via email to