2012-04-06 1 views
1

Я наткнулся на поисковые кириллицы (а также любые другие не-ASCII) символы в формате PDF с помощью PDDScanner. Код, который я использую, похож на упомянутый код SO из блога идей Randon. Проблема в том, что для кириллических PDF-файлов вывод сканера представляет собой полный мусор, который нельзя декодировать ни для чего значимого. Английские символы в кириллических PDF-файлах ищутся просто отлично. Таким образом, проблема в том, что когда дело доходит до кириллицы, оно кодируется, и мы не можем понять, как его правильно декодировать.Как искать символы не-ASCII (кириллицы) в формате PDF с использованием QuartzPDF?

Что мы упускаем здесь?

Благодарим всех, кто может пролить свет на эту тему.

+0

Вы можете разместить код, а также ссылку на сказал " Блог идей Рэндона "? От манжеты это звучит как проблема кодирования символов, но сам PDF является тернистым. –

+0

http://blog.random-ideas.net/?p=184 код прост в разрезе-n-paste – Adviser2010

ответ

0

Возможно, вам придется углубиться в Apple spec and headers on this - добавьте строки NSLog (и опубликуйте их здесь), что сканер находит для обычного PDF-файла и кириллических. Есть много возможностей (возможно, другая кодировка, т. Е. Вам нужно перевести строку, которую вы используете, другой, используя кодировку). Я уверен, что есть способ перечислить всех операторов в таблице, чтобы увидеть, есть ли в вашем кириллическом формате pdf дополнительные. Кроме того, this might help как очень похожая проблема, которую вы пытаетесь решить, - это также указывает на library that is more tuned to scanning.

+0

Я пробовал PDFKitten, он тоже не работает с кириллицей. – Adviser2010

+0

Я добавил NSlog и получил следующее (выдержка) ~ ~˚˚ ˛˚˚-~˝-˙˝www.mediayug.ru~˚˛˝˙ ˘ ˙ ˛˝˛: ˘ ˘! ˘ \t ˘, ˘ ˘ ˘˘ \t IPAD ~ ˚˛˝˙˘˙ ˚ ˘ ˝ ˙˝ ˚˛˝˘ Android 2012-04-09 14: 24: 32,238 PublishLike [8939: 16d03] ı ¾ à ¶  ¾ À ¶ Å Æ Ä ¾ ½ ¸ Ä º Ç È ¶ ¶ ¾ Æ Ä º ¶ ¼ Ž Ž ¿Æ Ä Ä Ã Ã À À Ç Ç Ç Ä Ä Ä Ä Ç È ¶ ¸ Á Õ »È ¸ Ç Æ» º à  ¸ È »Í à ¾ Å Ä Ç Á» º à ¾ Ë – Adviser2010

+0

Обратите внимание, что английские символы закодированы. но остальная часть текста выглядит загадочной. – Adviser2010

1

Вы пытались нажать эту строку с помощью другой кодировки? Когда я смотрю на NSString.h, я вижу что-то подозрительно маркированный «кириллицы», который также имеет «Adobe» на той же строке :) (то есть, попробуйте NSWindowsCP1251StringEncoding)

enum { 
    NSASCIIStringEncoding = 1,  /* 0..127 only */ 
    NSNEXTSTEPStringEncoding = 2, 
    NSJapaneseEUCStringEncoding = 3, 
    NSUTF8StringEncoding = 4, 
    NSISOLatin1StringEncoding = 5, 
    NSSymbolStringEncoding = 6, 
    NSNonLossyASCIIStringEncoding = 7, 
    NSShiftJISStringEncoding = 8,   /* kCFStringEncodingDOSJapanese */ 
    NSISOLatin2StringEncoding = 9, 
    NSUnicodeStringEncoding = 10, 
    NSWindowsCP1251StringEncoding = 11, /* Cyrillic; same as AdobeStandardCyrillic */ 
    NSWindowsCP1252StringEncoding = 12, /* WinLatin1 */ 
    NSWindowsCP1253StringEncoding = 13, /* Greek */ 
    NSWindowsCP1254StringEncoding = 14, /* Turkish */ 
    NSWindowsCP1250StringEncoding = 15, /* WinLatin2 */ 
    NSISO2022JPStringEncoding = 21,  /* ISO 2022 Japanese encoding for e-mail */ 
    NSMacOSRomanStringEncoding = 30, 

    NSUTF16StringEncoding = NSUnicodeStringEncoding,  /* An alias for NSUnicodeStringEncoding */ 

    NSUTF16BigEndianStringEncoding = 0x90000100,   /* NSUTF16StringEncoding encoding with explicit endianness specified */ 
    NSUTF16LittleEndianStringEncoding = 0x94000100,  /* NSUTF16StringEncoding encoding with explicit endianness specified */ 

    NSUTF32StringEncoding = 0x8c000100,     
    NSUTF32BigEndianStringEncoding = 0x98000100,   /* NSUTF32StringEncoding encoding with explicit endianness specified */ 
    NSUTF32LittleEndianStringEncoding = 0x9c000100  /* NSUTF32StringEncoding encoding with explicit endianness specified */ 
}; 
+0

К сожалению, это не поможет. Я попытался преобразовать NSSTring, используя вышеописанную кодировку, но он не работает ... – Adviser2010

+0

NSData * data = [currentData dataUsingEncoding: NSUTF8StringEncoding]; NSString * ddd = [[NSString alloc] initWithData: кодирование данных: NSWindowsCP1251StringEncoding]; проблема в том, что когда я пытаюсь декодировать весь поток, возвращенный сканером, он возвращает null. другие кодировки снова снова дали мне полный мусор. – Adviser2010