美文网首页
iOS开发 - 「Swift 学习」String字符编码

iOS开发 - 「Swift 学习」String字符编码

作者: 俺不是大佬儿 | 来源:发表于2021-11-19 09:31 被阅读0次

Swift字符Unicode编码

可扩展的字符群集可以组成一个或者多个 Unicode 标量。这意味着不同的字符以及相同字符的不同表示方式可能需要不同数量的内存空间来存储。所以 Swift 中的字符在一个字符串中并不一定占用相同的内存空间数量。因此在没有获取字符串的可扩展的字符群的范围时候,就不能计算出字符串的字符数量。如果您正在处理一个长字符串,需要注意characters属性必须遍历全部的 Unicode 标量,来确定字符串的字符数量

字符串Unicode标量的特殊字符

       //字符串字面量的特殊字符
        let dollarSign = "\u{24}"             // $, Unicode 标量 U+0024
        let blackHeart = "\u{2665}"           // ♥, Unicode 标量 U+2665
        let sparklingHeart = "\u{1F496}"      // 💖, Unicode 标量 U+1F496
        let unicodeStrEg = "这个字符串有点儿特殊,你看到的长度不一定是真的\u{1F496}"      // 💖, Unicode 标量 U+1F496
        
        //获取字符串的长度()
        let sparklingHeart_l = sparklingHeart.count
        print("sparklingHeart字符串的长度:\(sparklingHeart_l)")
        //打印输出:sparklingHeart字符串的长度:1
        for char in sparklingHeart {
            print("遍历结果:\(char)")
            //打印输出: 遍历结果:💖
        }

        print("\(dollarSign)\n\(blackHeart)\n\(sparklingHeart)\n\(unicodeStrEg)")
        //打印输出:
        /*
        $
        ♥
        💖
        这个字符串有点儿特殊,你看到的长度不一定是真的💖
        */

这就说明\color{red}{通过characters属性返回的字符数量并不总是与包含相同字符的NSString的length属性相同。}NSString的length属性是利用 UTF-16 表示的十六位代码单元数字,而不是 Unicode 可扩展的字符群集。

\color{red}{划重点了:}
不同的字符可能会占用不同数量的内存空间,所以要知道Character的确定位置,就必须从String开头遍历每一个 Unicode 标量直到结尾。因此,Swift 的字符串不能用整数(integer)做索引。

可扩展的字形群集

//可扩展的字形群集
        let eAcute: Character = "\u{E9}"                         // é
        let combinedEAcute: Character = "\u{65}\u{301}"          // e 后面加上
        // eAcute 是 é, combinedEAcute 是 é
        print("eAcuteValue:\(eAcute),combinedEAcuteValue:\(combinedEAcute)")
        //打印输出: eAcuteValue:é,combinedEAcuteValue:é

UTF-8 编码

let unicodeString   = "好好学习,天天向上"
        //UTF-8 编码:
        for code in unicodeString.utf8 {
            print("UTF-8 编码:\(code) ")
            //打印输出:
            /*
            UTF-8 编码:229
            UTF-8 编码:164
            UTF-8 编码:169
            UTF-8 编码:229
            UTF-8 编码:144
            UTF-8 编码:145
            UTF-8 编码:228
            UTF-8 编码:184
            UTF-8 编码:138
             */
        }

UTF-16 编码

//UTF-16 编码:
        let unicodeString   = "好好学习,天天向上"
        for code in unicodeString.utf16 {
           print("UTF-16 编码:\(code) ")
            //打印输出:
            /*
            UTF-16 编码:22909
            UTF-16 编码:22909
            UTF-16 编码:23398
            UTF-16 编码:20064
            UTF-16 编码:65292
            UTF-16 编码:22825
            UTF-16 编码:22825
            UTF-16 编码:21521
            UTF-16 编码:19978
            */
        }

\color{gray}{欢迎大佬儿来指正纠错,共同学习😏!!}

相关文章

网友评论

      本文标题:iOS开发 - 「Swift 学习」String字符编码

      本文链接:https://www.haomeiwen.com/subject/qtlhtrtx.html