我偶然发现使用 PDDScanner 在 PDF 中搜索西里尔字母(以及任何其他非 ASCII)字符。我使用的代码类似于 Randon ideas 博客中提到的 SO 代码。问题在于,对于西里尔文 PDF,扫描仪的输出完全是垃圾,无法解码为任何有意义的东西。西里尔文 PDF 中的英文字符可以完美搜索。所以,问题是当涉及到西里尔字母时,它是经过编码的,我们无法正确解码它。
我们在这里错过了什么?
提前感谢任何可以阐明该主题的人。
最佳答案
您是否尝试过通过不同的编码来推送该字符串?当我查看 NSString.h
时,我看到一些可疑的标记为“cyrillic”的东西,它在同一行上也有“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 */
};
关于ios - 如何使用 QuartzPDF 在 PDF 中搜索非 ASCII 字符(西里尔字符)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10040136/