是否有一些标准方法可以从字符串中删除所有不能用于osx文件名的字符?您允许使用的字符是否与某些常用类别相对应? (我知道定义一个允许的字符列表是可能的,但我希望能够使用多种语言的文件名(中文等),所以这会有点痛苦。)一个在ubuntu中也有效的解决方案,会很棒。
答案 0 :(得分:0)
我使用以下代码将任意字符串转换为有效的文件名。它遵循与将URL拖动到桌面时创建webloc文件相似的规则(如果不相同)。
// Returns a sting representing this filename transformed (if neccesary) to make
// a valid (Mac OS X) filename.
- (NSString *) stringByMakingFileNameValid:(NSString *)fileName
{
NSMutableString * validFileName = [NSMutableString stringWithString:fileName];
if (!validFileName || [validFileName isEqualToString:@""]) {
return @"untitled";
}
// remove initial period chars "."
if ([validFileName hasPrefix:@"."]) {
NSRange dotRange = [validFileName rangeOfCharacterFromSet:[NSCharacterSet characterSetWithCharactersInString:@"."]];
[validFileName deleteCharactersInRange:dotRange];
}
// remove any colon chars ":" (same as webloc creation behaviour)
[validFileName replaceOccurrencesOfString:@":" withString:@"" options:0 range:NSMakeRange(0, [validFileName length])];
// this may lead to spaces at either end which need trimming
validFileName = [[[validFileName stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] mutableCopy] autorelease];
// if there is nothing left return default value
if ([validFileName isEqualToString:@""]) {
return @"untitled";
}
// replace other disallowed Mac OS X characters
[validFileName replaceOccurrencesOfString:@"/" withString:@"-" options:0 range:NSMakeRange(0, [validFileName length])];
// if grater than 102 chars reduce to 101 and add elipses
if ([validFileName length] > 102) {
[validFileName deleteCharactersInRange:NSMakeRange(100, [validFileName length]-100)];
[validFileName appendString:@"…"];
}
return [[validFileName copy] autorelease];
}
在达尔文级别,“/”字符存储为“:”字符(反之亦然)。出于美观原因,将它们移除。
答案 1 :(得分:0)
允许使用除“/”之外的任何unicode字符。因为您的问题与AppleScript相关,所以我必须通知您,Macintosh Paths显示“/”,而实际字符为“:”。因此,当您告诉Finder在路径“Macintosh HD:用户:短名称:桌面:图像/电影”中创建文件夹时,在POSIX中它将看起来像“/ Users / shortname / Desktop / images:movies”。