Как определить, нормализуется ли NSString в NFD? - PullRequest
4 голосов
/ 07 сентября 2010

Мне нужно определить, находится ли данная строка NSSt в форме NFD. Как мне это сделать?

Контекст:

Путь к файлу, который я получаю из Mac OS (в форме NSString), находится в канонической разложенной форме (NFD). Это особенно верно, когда файловая система HFSPlus. http://developer.apple.com/mac/library/technotes/tn/tn1150.html#CanonicalDecomposition

Мне нужна предварительно составленная строка из этого. Теперь я хочу запустить функцию precomposedStringWithCanonicalMapping, только если я знаю, что имя файла разложено в форме NFD.

Решение, о котором я мог подумать:

//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);
}

Мое решение в порядке? Кроме того, верно ли мое понимание вывода файловой системы (в NFD)?

1 Ответ

3 голосов
/ 09 января 2013

Если вам нужна предварительно составленная строка (NFC), самый простой и безопасный способ - всегда запускать precomposedStringWithCanonicalMapping независимо от того, является ли строка NFD или нет.Например, возможно, вы можете получить строку, в которой некоторые символы предварительно составлены, а некоторые разложены.

Обратите внимание, что файловая система HFS + использует модифицированную версию NFD, где некоторые диапазоны кодовых точек сохраняются предварительно составленными длясовместимость с Mac OS 9;Я не знаю, использует ли функция decomposedStringWithCanonicalMapping те же правила, что и HFS +.

...