- - - - - - - - - - - - - - - - - - - - - - - - - - - -
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