ios-使强调字符能够很好地显示在文件路径中

奥立佛

我有以下代码可以从文件夹中获取所有文件:

- (NSMutableArray*) allFilesAtPath:(NSString *)startPath
{
    NSMutableArray* listing = [NSMutableArray array];
    NSArray* fileNames = [self contentsOfDirectoryAtPath:startPath error:nil];
    if (!fileNames) return listing;

    for (NSString* file in fileNames) {
        NSString* absPath = [startPath stringByAppendingPathComponent:file];

        BOOL isDir = NO;
        if ([self fileExistsAtPath:absPath isDirectory:&isDir]) {

            [listing addObject:absPath];
            if (isDir) [listing addObjectsFromArray:[self allFilesAtPath:absPath]];
        }
    }
    return listing;
}

在一个测试文件夹中,我有一个名为yahoéo.jpg
NSLogged的文件,其显示为yahoe\U0301o.jpg

当然,这对于任何其他在文件名中没有这种突出字符的文件都可以正常工作。

因此,当我尝试使用以下命令将其从数组中删除时:

[theFilesArray removeObject:fileName];

fileName是yahoéo.jpg
不删除,因为未在数组中找到它。

为什么要进行这样的字符替换。我在文档中找不到任何有关此的内容。应该对哪些字符进行相同的处理?我怎么知道呢?

最重要的是,如何é在文件名数组中获取字符?

编辑

fileName 在removeObject方法中使用的变量是通过从PList文件获取一个字符串并将其提供给以下方法来构造的:

+ (NSString*) fileNameWithString:(NSString*)str
{
    NSString* fileName = str;

    NSCharacterSet* charactersToRemove = [NSCharacterSet characterSetWithCharactersInString:@".:/\\"];
    fileName = [[fileName componentsSeparatedByCharactersInSet:charactersToRemove] componentsJoinedByString:@"#"];

    fileName = [fileName stringByAppendingString:@".jpg"];

    return fileName;
}
马丁·R

NSLog输出NSArray\Unnnn转义形式显示所有非ASCII字符但这只是NSLog打印它的方式,所以这不应该是问题。

我认为这是“已分解”字符与“已分解”字符的问题。HFS文件系统在文件名中使用分解的字符,因此é存储为两个Unicode字符:

U+0065 + U+0301  = "e" + COMBINING ACUTE ACCENT

(并且NSLog将其打印为e\U0301)。

这与单个Unicode字符(预组合形式)不同

U+00E9 = "é" 

因此,如果字符串yahoéo.jpg的字符以预组合形式存储,则在数组中将找不到该字符串

如果确实存在问题,则可以使用的precomposedStringWithCanonicalMappingdecomposedStringWithCanonicalMapping方法,通过将所有文件名规范化为预分解或分解形式来解决此问题NSString

评论:

  • 字符串的预分解和分解版本都将以相同的方式显示(例如é)。
  • compare:方法NSString将字符串的两个版本都视为相等(除非您使用NSLiteralSearch选项调用它)。
  • 所述isEqual:的方法NSString考虑了字符串作为不同的两个版本,以及所使用的removeObject:查找对象以移除。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

TOP 榜单

热门标签

归档