В документации Apple говорится:
[...] современные файловые системы, такие как HFS+ (используемая Mac OS X), позволяют создавать имена файлов с ограничением в 255 символов [...] символы могут фактически занимать до девяти английских символов для хранения [. ..] Это следует учитывать при попытке создать более длинные имена.
Как ограничить длину NSString таким образом, чтобы она действительно была короче 255 символов, даже если она включает символы, для хранения которых может потребоваться более одного символа?
Я добавляю свою текущую реализацию ниже. Если я добавлю, например. смайлики в строку, в то время как length
отвечает, результирующая строка будет намного меньше 255, она все еще слишком длинная, чтобы быть принятой NSSavePanel
в качестве имени файла.
NSRange stringRange = {0, MIN([fileName length], 255)};
stringRange = [fileName rangeOfComposedCharacterSequencesForRange:stringRange];
fileName = [fileName substringWithRange:stringRange];
rangeOfComposedCharacterSequencesForRange:
в основном делает противоположное тому, что вы хотите: вы даете ему диапазон, который насчитывает 255 кодовых точек, и он дает вам диапазон байтов, который охватывает их, что может оказаться намного больше, чем вы хотите. Я не совсем уверен, как сделать обратный расчет; интересная маленькая головоломка. - person jscs   schedule 30.07.2015enumerateSubstringsInRange:options:usingBlock:
- person jscs   schedule 30.07.2015