Macos NSTask输出特殊字符转换为UTF8
我通过NSTask运行lsof,通过管道输出并读取NSData。然后,我使用以下数据创建NSString:Macos NSTask输出特殊字符转换为UTF8,macos,cocoa,utf-8,nstask,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\x8c
[[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的方法。我发现将环境变量LC_ALL设置为en_US.UTF-8就可以了
[task setEnvironment:@{@"LC_ALL" : @"en_US.UTF-8"}];
这对我有用
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];
在Swift中,任务被过程取代:
let process: Process = Process()
process.environment = ["LC_ALL": "en_US.UTF-8"]
不幸的是,这对我不起作用,NSTask仍然会生成分解的utf-8。您能解释一下您的代码在做什么,以及为什么它解决了这个问题吗。