为什么我们应该使用NSString的uppercaseStringWithLocale来获取正确的大写字符串?

Joh*_*een 5 unicode macos objective-c ios

我有一个非常简单的任务:从服务器我得到UTF-8字符串作为字节数组,我需要以大写形式显示此字符串中的所有符号.从这个字符串你可以得到任何unicode表的符号.

我知道如何在一行代码中完成它:

NSString* upperStr = [[NSString stringWithCString:utf8str encoding:NSUTF8StringEncoding] uppercaseString];
Run Code Online (Sandbox Code Playgroud)

在我看来它适用于我检查过的所有符号.但我不明白:为什么我们需要方法uppercaseStringWithLocale?当我们使用unicode时,每个符号在unicode表中都有独特的位置,我们可以很容易地找到它有大/小写的表示.什么麻烦我可能会,如果我使用uppercaseString代替uppercaseStringWithLocale

Phi*_*ipp 21

大写字母依赖于语言环境.例如,"i"的大写版本在英语中是"I",但在土耳其语中是"İ".如果你总是应用英语规则,土耳其语单词的大写将最终错误.


Wil*_*ley 6

文档说:

以下方法基于指定的语言环境执行本地化的案例映射.传递nil表示规范映射.对于用户首选项区域设置,请指定+ [NSLocale currentLocale].

假设在某些语言环境中,即使在字符集中,从小写到大写的映射也会发生变化.我不是全球各种语言的专家,但是编写这些方法的人都是,所以我用它们.