|
|
|
Supreme Being
      
участник
Last Login: 02.08.2008 10:18
Сообщ.: 143,
Visits: 1 405
|
|
| Доброго времени суток ! Извлекаю текст из .txt ( OffFilt.dll ) , C#, .NET Framework 2.0. Получаю что-то вроде : РѕРїСЂРѕСЃС‹ РїРѕ педагогике...., причём, не всегда - очень редко но бывает. Что необходимо корректно указать не знаю, или может быть это результат некорректных символов в тексте, кто знает - подскажите пожалуйста.
Men in black
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
| Это очень похоже на русский текст в кодировке UTF-8
|
|
|
|
|
Supreme Being
      
участник
Last Login: 02.08.2008 10:18
Сообщ.: 143,
Visits: 1 405
|
|
Похоже, только вот, что делать с этим не знаю...
Men in black
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
| Метод IFilter.GetText относится к Indexing Service да? А как ты его вызываешь?
|
|
|
|
|
Supreme 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
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
| Проверь входной файл, потому что вызов абсолютно правильно делается.
|
|
|
|
|
Supreme Being
      
участник
Last Login: 02.08.2008 10:18
Сообщ.: 143,
Visits: 1 405
|
|
Нашёл, есть несколько символов. Но почему, если их всего пара на строку, на выходе весь текст перекодирован ?
Men in black
|
|
|
|
|
Supreme Being
      
участник
Last Login: 02.08.2008 10:18
Сообщ.: 143,
Visits: 1 405
|
|
| Да, и ещё, есть ли способ профильтровать входной файл для удаления некорректных символов ? Спасибо.
Men in black
|
|
|
|
|
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 есть куча классов для работы с файлами как на уровне байтов так и на уровне символов.
|
|
|
|