0

我有一个由附属应用程序构建的数据文件。我需要找到数据文件中包含的一些子字符串。它们可以通过分隔它们的字符符号来识别。例如 : *!substringqSxt 。子字符串因项目而异,因此我需要找到分隔它们的符号以读取以下子字符串。我还将文件打印为不同的编码,尝试使用哪种编码并匹配原始数据文件。发现它是MacOsRomanStringEncoding

NSRange:rangOfString用来定位分隔符号。这是我的代码:

char *debutAudio ="jjbj";
char *finAudio ="qSxt";

NSString *debutAudioConverted = [[NSString alloc]
                                 initWithCString: debutAudio
                                 encoding:NSMacOSRomanStringEncoding];
NSString *finAudioConverted = [[NSString alloc]
                               initWithCString: finAudio
                               encoding:NSMacOSRomanStringEncoding];


NSRange debutaudioRange =[dataFileContent rangeOfString:debutAudioConverted];
NSRange finaudioRange =[dataFileContent rangeOfString:finAudioConverted];


NSLog(@"range is %@",NSStringFromRange(debutaudioRange));
NSLog(@"range is %@",NSStringFromRange(finaudioRange));

两个NSLog返回范围都是 {9223372036854775807, 0} 所以不要在那里定位分隔字符串。

如果我要求查找文件中包含的其他字符串,例如“设置”,rangeOfString则会返回正确的位置和长度。

我认为该文件可能包含多种编码,并尝试转换initWithCString为任何可能的编码,但无济于事。

此外,如果我在文本编辑中打开文件并使用“查找”功能,它不会找到分隔字符串,但会找到其他单词。我的胆量告诉我它的相关性。我不知道在哪里寻找信息。可以保护文件吗,不过我正在阅读它的副本。

4

1 回答 1

0

我发现这里发生的问题。正确的编码仍然是 MacOsRoman。问题是前缀字符串*debutAudio "jjbj"实际上有一个很小的空格,例如每个字符之间的四分之一空格。我已经尝试了这里列出的每个 unicode 空格:https ://www.cs.tut.fi/~jkorpela/chars/spaces.html#adj 没有任何成功。现在我将尝试在 MacOsRoman 下找到一半或四分之一的空间,看看这是否有效。

于 2015-09-22T20:37:48.217 回答