Определенные последовательности восьмерки для iOS: nil для stringWithUTF8String - PullRequest
1 голос
/ 16 июня 2011

Наш код вызывает stringWithUTF8String, но некоторые данные, которые у нас есть, используют последовательность octal \ 340 в строке.Это приводит к сбою некоторого кода, потому что мы никогда не ожидаем, что функция вернет nil.Я провел некоторое исследование и обнаружил, что любая восьмеричная последовательность из \ 200- \ 777 даст тот же результат.Я знаю, что могу справиться с этим возвращением nil, но я хочу понять, почему он вернет nil, и как эти восьмеричные экранированные символы интерпретируются как.,Похоже, что для защиты кода нам придется проверять нулевые результаты для этого везде, где мы его используем, что кажется неудачным.В документации по функции ничего не сказано о возврате nil как возможного.Могу поспорить, что существует много кода, который тоже не проверяет его.

Ответы [ 3 ]

2 голосов
/ 16 июня 2011

В UTF-8 Character Table нет записи для \340. Для этого вам нужно использовать кодировку ASCII. Есть,

NSString * result = [NSString stringWithCString:"Mfile \340 xyz.jpg" encoding:NSASCIIStringEncoding];
NSLog(@"%@", result); 
0 голосов
/ 18 июля 2012

Я добавил категорию, которая называется safeStringWithUTF8String: она вызывается везде, вместо этого она просто проверяет возвращаемое значение для nil и возвращает пустую строку, если она недействительна. Не очень хорошо, но не уверен, что еще нужно сделать, мы должны быть в состоянии обрабатывать любые передаваемые данные.

0 голосов
/ 16 июня 2011

Если вы хотите, чтобы iOS воспринимала его как UTF-8, вам нужно убедиться, что вы передаете ему действительные символы UTF-8, поэтому вам, возможно, потребуется сначала преобразовать восьмеричные символы во что-то, удобное для чтения человеком.

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