NSTask输出特殊字符转换为UTF8

时间:2015-09-16 10:20:03

标签: macos cocoa utf-8 nstask

我通过NSTask运行lsof,管道输出并读入NSData。然后我用这个数据创建NSString:

[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

问题我看到,NSTask是如何解释特殊字符的。对于名称为!@#$%^±^&*()ľščťžýáíé.docx的文件 我得到了这个结果:!@#$%^\xc2\xb1^&*()l\xcc\x8cs\xcc\x8cc\xcc\x8ct\xcc\x8cz\xcc\x8cy\xcc\x81a\xcc\x81i\xcc\x81e\xcc\x81.docx 看起来像分解的UTF8与十六进制编码值。不幸的是,我无法找到将其转换为正确的UTF8的方法。

3 个答案:

答案 0 :(得分:1)

我发现将环境变量LC_ALL设置为en_US.UTF-8就可以了。

[task setEnvironment:@{@"LC_ALL" : @"en_US.UTF-8"}];

答案 1 :(得分:0)

对我有用。

    NSTask *task = [[NSTask alloc] init];
    NSMutableDictionary * e = [NSMutableDictionary dictionaryWithDictionary:[[NSProcessInfo processInfo] environment]];
    [e setObject:@"en_US.UTF-8" forKey:@"LC_ALL"];
    [e setObject:@"en_US.UTF-8" forKey:@"LANG"];
    [task setEnvironment:e];

答案 2 :(得分:0)

在Swift NSTask中被Process代替:

let process: Process = Process()
process.environment = ["LC_ALL": "en_US.UTF-8"]