Почему мы должны использовать uppercaseStringWithLocale для NSString для получения правильной строки в верхнем регистре?

У меня очень простая задача: с сервера я получаю строку UTF-8 виде байтового массива, и мне нужно показать все символы из этой строки в верхнем регистре. Из этой строки вы можете получить действительно любой символ таблицы Unicode.

Я знаю, как это сделать в строке кода:

 NSString* upperStr = [[NSString stringWithCString:utf8str encoding:NSUTF8StringEncoding] uppercaseString]; 

И мне кажется, что он работает со всеми символами, которые я проверил. Но я не понимаю: зачем нам нужен метод uppercaseStringWithLocale ? Когда мы работаем с unicode, каждый символ имеет уникальное место в таблице Unicode, и мы можем легко найти, имеет ли он представление верхнего / нижнего регистра. Какие проблемы могут возникнуть, если я использую uppercaseString вместо uppercaseStringWithLocale ?

Документы говорят:

Следующие методы выполняют локализованные отображения случаев на основе указанной локали. Передача nil указывает на каноническое отображение. Для настройки языкового предпочтения пользователя укажите + [NSLocale currentLocale].

Предположительно, в некоторых локалях отображение от нижнего к верхнему регистру меняется даже внутри набора символов. Я не эксперт на всех языках по всему миру, но люди, которые написали эти методы, я использую их.

Верхний регистр зависит от локали. Например, прописная версия «i» – «я» на английском языке, но «İ» на турецком языке. Если вы всегда применяете английские правила, верхняя часть турецких слов окажется неправильной.

  • Только 2 emoji возвращают неверную длину при сравнении с набором символов, содержащим их
  • Преобразование NSString в и из UTF32
  • Преобразование символа Unicode или его объектов XML / HTML в его номер Unicode в Swift
  • iOS5 fancy icons (emoji?) для специальных символов Unicode - не то, что я хочу
  • Как использовать плоские emojicons с iOS
  • Как преобразовать строку в строку unicode (UTF-8) в Swift?
  • Полнотекстовый поиск на iOS5, iOS6 Unicode (русский, японский, китайский, корейский)
  • HTML unicode arrow работает на рабочем столе Safari, но не Safari для iOS
  • Как отобразить символ верхнего индекса% как строку в UIlabel?
  • ios: локализовать имя emoji (kCFStringTransformToUnicodeName)
  • Очистка неправильных строк UTF8
  • Давайте будем гением компьютера.