кодирование информации в именах файлов (iPhone / mac) - PullRequest
2 голосов
/ 22 января 2012

Я хочу закодировать короткий заголовок в именах файлов. Проблема в том, что иногда заголовок будет содержать такой символ, как двоеточие или косая черта. Существует ли стандартная кодировка, которая была бы типичной / подходящей для этого?

РЕДАКТИРОВАТЬ: чтобы уточнить, я хочу закодировать заголовок таким образом, чтобы закодированный заголовок мог использоваться в качестве имени файла. Или это называется процентом экранирования?

Ответы [ 4 ]

2 голосов
/ 22 января 2012

Я делаю это с помощью категории на NSURL, которую я использую, чтобы получить NSURL для имени файла в определенном каталоге.Получив NSURL, я могу получить или сохранить файл с помощью URL-адреса после выполнения обычной проверки того, существует ли файл и обрабатывает ли он эти случаи соответствующим образом.

Соответствующий фрагмент кода:

+ (NSURL *)adnURLForFileName:(NSString *)fileName inDirectory:(NSSearchPathDirectory)searchDirectory {
    NSString *percentEscapedFileName = [fileName stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    NSFileManager *fileManager = [[NSFileManager alloc] init];

    NSURL *URLForDirectory = [[fileManager URLsForDirectory:searchDirectory inDomains:NSUserDomainMask] objectAtIndex:0];

    return [NSURL URLWithString:percentEscapedFileName relativeToURL:URLForDirectory];
}

Вы можете загрузить полный код категории с GitHub - NSURL + ADNFileHelpers

1 голос
/ 22 января 2012

Вы можете использовать -stringByReplacingOccurrencesOfString:withString:, чтобы заменить символ косой черты на U + 2044, «solidus» или «дробная черта». Это выглядит так:

http://en.wikipedia.org/wiki/Solidus_(punctuation)

0 голосов
/ 22 января 2012

Я подошел к этой проблеме, отфильтровав заголовок, прежде чем использовать его в имени файла.NSString имеет несколько полезных методов, таких как stringByStandardizingPath и stringByReplacingOccurrencesOfString:withString :.Подход фильтрации с потерями в том, что исходная информация заголовка не может быть восстановлена.Точно так же я не думаю, что кодирование сработает, потому что iOS допускает такой широкий диапазон символов в именах файлов.Одним из возможных альтернативных решений может быть plist архив с ключом = имя файла , значение = заголовок .

0 голосов
/ 22 января 2012

Косая черта не допускается в API Unix.Запрещено использовать двоеточие в HFS и в старых API-интерфейсах File Manager.Тот же символ имени файла будет отображаться как двоеточие в первом и как косая черта во втором.На практике: вы можете использовать Finder для переименования файла в «/» (потому что Finder использует традиционный разделитель Mac для :), но он будет отображаться как «:», если вы используете ls.

Если вам нужно разрешить двоеточия и косые черты, вам нужно как-то кодировать символы.Вы можете использовать экранирование в стиле URL, но если вы ожидаете, что пользователь увидит имя файла в Finder или в какой-либо другой программе, это будет выглядеть ужасно.Лучше избегать только разделителя пути.Например, если вы используете API в стиле Unix (разделитель пути /), вы можете кодировать / как :- и : как :: (чтобы избежать неоднозначности).Или вы можете использовать какой-то другой малоиспользуемый персонаж для побега.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...