我通过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的方法。
答案 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"]