IFilter.GetText
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



IFilter.GetText Expand / Collapse
Автор
Сообщение
08.08.2006 23:55
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 02.08.2008 10:18
Сообщ.: 143, Visits: 1 405
Доброго времени суток !

Извлекаю текст из .txt ( OffFilt.dll ) , C#, .NET Framework 2.0. Получаю что-то вроде : РѕРїСЂРѕСЃС‹ РїРѕ педагогике...., причём, не всегда - очень редко но бывает.

Что необходимо корректно указать не знаю, или может быть это результат некорректных символов в тексте, кто знает - подскажите пожалуйста.

Men in black

Сообщ. #902332
09.08.2006 10:03
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Это очень похоже на русский текст в кодировке UTF-8
Сообщ. #902346
09.08.2006 13:15
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 02.08.2008 10:18
Сообщ.: 143, Visits: 1 405
Похоже, только вот, что делать с этим не знаю...

Men in black
Сообщ. #902366
09.08.2006 14:10
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Метод IFilter.GetText относится к Indexing Service да? А как ты его вызываешь?
Сообщ. #902375
09.08.2006 15:08
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 02.08.2008 10:18
Сообщ.: 143, Visits: 1 405
описание интерфейса:

public enum IFilterReturnCodes : uint{

S_OK = 0 ,

E_FAIL = 0x80000008

.....

}

[ComImport , Guid ( "89BCB740-6119-101A-BCB7-00DD010655AF" )]

[InterfaceType ( ComInterfaceType.InterfaceIsIUnknown )]

internal interface IFilter{

........

[PreserveSig]

IFilterReturnCodes Init (

[In ( ) , MarshalAs ( UnmanagedType.I4 )]

IFILTER_INIT grfFlags ,

[In ( ) , MarshalAs ( UnmanagedType.U4 )]

UInt32 cAttributes ,

[In ( ) , MarshalAs ( UnmanagedType.SysInt )]

IntPtr aAttributes ,

[Out ( ) , MarshalAs ( UnmanagedType.U4 )]

out IFILTER_FLAGS pdwFlags );

[PreserveSig]

IFilterReturnCodes GetText (

[In ( ) , Out ( ) , MarshalAs ( UnmanagedType.U4 )]

ref UInt32 pcwcBuffer ,

[Out ( ) , MarshalAs ( UnmanagedType.LPWStr )]

StringBuilder awcBuffer );

}

вызов GetText :

IFilter filter = Filter.LoadIFilter ( полное имя файла ); // загрузка фильтра

....

IFilterReturnCodes scode = filter.Init ( .... ); // инициализация сессии

....

UInt32 pcwcBuffer = 65536;

System.Text.StringBuilder sbBuffer = new System.Text.StringBuilder ( ( Int32 ) pcwcBuffer );

IFilterReturnCodes scode = filter.GetText ( ref pcwcBuffer , sbBuffer );

Так вот в общих чертах, по сути, код навеян : http://www.dotlucene.net/documentation/MicrosoftOfficeDocumentsP.html

В принципе, я столкнулся с этим в первый раз, до этого всё было нормально, файл .txt ~ 500 Kb. Файл получен в результате работы другого конвертера, уже здесь мог быть косяк с кодировкой.

Реализации фильтров брал отсюда http://www.citeknet.com/. Для hlp вообще - при вызове IFilter.Init приложение падает с "...память не может быть Read". Вообще больше понравилось http://www.codeproject.com/csharp/IFilter.asp, без необходимости использовать COM механизм.

Спасибо, всё равно, bazile.

Men in black

Сообщ. #902379
09.08.2006 15:43
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Проверь входной файл, потому что вызов абсолютно правильно делается.
Сообщ. #902383
09.08.2006 16:15
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 02.08.2008 10:18
Сообщ.: 143, Visits: 1 405
Нашёл, есть несколько символов. Но почему, если их всего пара на строку, на выходе весь текст перекодирован ?

Men in black
Сообщ. #902388
09.08.2006 16:20
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 02.08.2008 10:18
Сообщ.: 143, Visits: 1 405
Да, и ещё, есть ли способ профильтровать входной файл для удаления некорректных символов ?

Спасибо.

Men in black

Сообщ. #902392
09.08.2006 16:48
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Вячеслав_Васильев (09.08.2006)
Нашёл, есть несколько символов. Но почему, если их всего пара на строку, на выходе весь текст перекодирован ?

Не видя что это за символы могу только предполагать, что это так называемый Unicode prolog то есть признак unicode кодировки.

Вячеслав_Васильев (09.08.2006)
Да, и ещё, есть ли способ профильтровать входной файл для удаления некорректных символов ?

В пространстве имен System.IO есть куча классов для работы с файлами как на уровне байтов так и на уровне символов.

Сообщ. #902399