在非ascii文件名上使用tar会产生与命令行或Objective-C代码不同的结果
我正在使用Objective C使用tar命令归档一些文件;其中一些可能包含也可能不包含非ascii字符,例如商标符号™, 在Unicode U+2122中 我使用NSTask调用tar二进制文件,如下所示:在非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
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
多谢各位