【问题标题】:rangeOfString and encodingrangeOfString 和编码
【发布时间】:2012-11-01 12:09:40
【问题描述】:

我正在尝试解析我使用 NSTask 执行的 shell 命令的输出。寻找特定的子字符串就足够了,只有永远找不到子字符串。

到目前为止我的代码:

NSPipe *pipe;
pipe = [NSPipe pipe];
[task setStandardOutput: pipe];

NSFileHandle *file;
file = [pipe fileHandleForReading];

[task launch];

NSData *data;
data = [file readDataToEndOfFile];

NSString *string;
string = [[NSString alloc] initWithData: data
                               encoding: NSUTF8StringEncoding];

NSLog(string);

if([string rangeOfString:@"Connection refused"].location != NSNotFound) {
    NSLog(@"found");
} else {
    NSLog(@"not found");
}

即使搜索的子字符串包含在变量 string 中,它也总是打印“未找到”。提前致谢。

【问题讨论】:

    标签: objective-c nsstring


    【解决方案1】:

    我很惊讶,但是当我把条件写反时。有效。 请查看以下示例:

    NSString *string = @"hello bla Connection refused Connection refused bla";
    if ([string rangeOfString:@"Connection refused"].location == NSNotFound) {
        NSLog(@"string does not contain Connection refused");
    } else {
        NSLog(@"string contains Connection refused!");
    }
    

    希望我清楚..

    【讨论】:

    • 不幸的是,它并不那么容易。当我像您一样初始化正在搜索的字符串时, rangeOfString 会按预期工作(即使在非反转条件下)。问题似乎在于将执行命令的输出转换为 NSString(可能是编码或其他什么?)。
    【解决方案2】:

    我错了。该命令的输出实际上是空的(因此显然没有找到要查找的字符串)。我期望 NSLog 调用的结果实际上是命令直接输出到控制台(stderr?)。很抱歉:(。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-17
      • 2018-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多