3

J'ai besoin de déterminer si un NSString donné est sous forme NFD. Comment je fais ça?Comment déterminer si un NSString est normalisé dans NFD?

Contexte:

Le chemin du fichier que je reçois de Mac OS (sous la forme d'un NSString) est sous forme décomposée canonique (DNF). Cela est particulièrement vrai lorsque le système de fichiers est HFSPlus. http://developer.apple.com/mac/library/technotes/tn/tn1150.html#CanonicalDecomposition

J'ai besoin d'une chaîne précomposée de cela. Maintenant, je veux exécuter la fonction precomposedStringWithCanonicalMapping seulement si je sais que le nom de fichier est décomposé sous forme NFD.

La solution que je pouvais penser:

//works on the idea that NFD(NFD(x)) = NFD(x) 
BOOL IsCanonicallyDecompsed(NSString *initialFilePath) { 
    //decompose the string to NFD form 
    NSString *nfdFormOfStr = [initialFilePath decomposedStringWithCanonicalMapping]; 
    char *ndfFormUTF8 = [nfdFormOfStr UTF8String]; 
    char *intialPathUTF8 = [initialFilePath UTF8String]; 
    return (strcmp(ndfFormUTF8, intialPathUTF8) == 0); 
} 

ma solution OK? Aussi, ma compréhension de la sortie du système de fichiers (dans NFD) est-elle correcte?

Répondre

2

Si vous avez besoin d'une chaîne précomposée (NFC), la chose la plus simple et la plus sûre à faire est de toujours exécuter precomposedStringWithCanonicalMapping, que la chaîne soit NFD ou non. Par exemple, il est possible que vous obteniez une chaîne où certains caractères sont précomposés et d'autres décomposés.

Notez que le système de fichiers HFS + utilise une version modifiée de NFD, où certaines plages de points de code sont conservées pour être compatibles avec Mac OS 9; Je ne sais pas si la fonction decomposedStringWithCanonicalMapping utilise les mêmes règles que HFS +.

Questions connexes