在非ascii文件名上使用tar会产生与命令行或Objective-C代码不同的结果

在非ascii文件名上使用tar会产生与命令行或Objective-C代码不同的结果,objective-c,unicode,tar,non-ascii-characters,Objective C,Unicode,Tar,Non Ascii Characters,我正在使用Objective C使用tar命令归档一些文件;其中一些可能包含也可能不包含非ascii字符,例如商标符号™, 在Unicode U+2122中 我使用NSTask调用tar二进制文件,如下所示: NSArray * args = [NSArray arrayWithObjects: @"-czf", [tar path], "@-C", [parentFolder path], fileName, nil]; NSTask * task = [N

我正在使用Objective C使用tar命令归档一些文件;其中一些可能包含也可能不包含非ascii字符,例如商标符号™, 在Unicode U+2122中

我使用NSTask调用tar二进制文件,如下所示:

NSArray * args = [NSArray arrayWithObjects: @"-czf",
                 [tar path], "@-C", [parentFolder path], fileName, nil];

NSTask * task = [NSTask launchedTaskWithLaunchPath: @"/usr/bin/tar" arguments:args];
将创建存档文件,但如果其中的文件包含非ascii字符,则不会保留该文件的名称

我的问题是:如果运行以下命令行,则会创建存档并保留所有文件名,即使它包含非ascii字符:

tar -cvf archive.tar filename™
现在,真正奇怪的是,如果我将这个确切的命令行放在一个sh脚本中,并使用NSTask从Objective-C运行它,它将不会产生与shell相同的结果,即:包含非ascii字符的文件名在存档时不会被保留

使用Zip解决了所有的问题,但这意味着要修改相当多的代码,所以我正在寻找一种解决方案,允许我首先继续使用tar

多谢各位