表情符号字符()与简单字符,lengthOfBytesUsingEncoding的结果不同

 艺维网络传媒 发布于 2023-01-09 16:45

我已经初始化了两个这样的字符常量:

let emojiCharacter = ""
let simpleCharacter = "a"

我正在打印lengthOfBytesUsingEncoding的结果,如下所示:

println("\(emojiCharacter) countElements returns \(countElements(emojiCharacter))")
println("\(simpleCharacter) countElements returns \(countElements(simpleCharacter))")
println("\(emojiCharacter) UTF16StringEncoding lengthOfBytesUsingEncoding returns \(emojiCharacter.lengthOfBytesUsingEncoding(NSUTF16StringEncoding))")
println("\(simpleCharacter) UTF16StringEncoding lengthOfBytesUsingEncoding returns \(simpleCharacter.lengthOfBytesUsingEncoding(NSUTF16StringEncoding))")
println("\(emojiCharacter) NSUTF8StringEncoding lengthOfBytesUsingEncoding returns \(emojiCharacter.lengthOfBytesUsingEncoding(NSUTF8StringEncoding))")
println("\(simpleCharacter) NSUTF8StringEncoding lengthOfBytesUsingEncoding returns \(simpleCharacter.lengthOfBytesUsingEncoding(NSUTF8StringEncoding))")

以下是结果:

 countElements returns 1
a countElements returns 1
 UTF16StringEncoding lengthOfBytesUsingEncoding returns 4
a UTF16StringEncoding lengthOfBytesUsingEncoding returns 2
 NSUTF8StringEncoding lengthOfBytesUsingEncoding returns 4
a NSUTF8StringEncoding lengthOfBytesUsingEncoding returns 1

我对结果感到困惑,因为根据我的理解,如果我们使用UTF16StringEncoding然后它将每个字符视为2个字节或16位,如果我们使用UTF8StringEncoding然后它将每个字符视为1个字节或8位,所以当我尝试记录simpleOfBytes for simpleCharacter使用UTF16StringEncoding它显示2个字节,而对于NSUTF8StringEncoding它显示1个字节.

我知道表情符号字符的表示方式不同,但为什么它总是将结果返回为4?

此外,如果我想迭代字符串中的每个字符,我将始终使用countElements,但那么确切地说何时使用lengthOfBytesUsingEncoding会有帮助吗?

请建议.

1 个回答
  • UTF编码的大小只是定义用于表示字符的最小字节数.但是,某些字符(如您使用的表情符号)需要表示超过2个字节.所有字符至少取决于编码中定义的最小值,并且最多可达到必要的字节数.

    存在不同编码的原因有多种,但为了给您一个简单的示例:如果您知道要使用的所有字符都是2个字节或更少,则可以使用UTF-16编码的字符串,以便您可以立即跳转到任何索引的字符都像普通数组一样,因为它们统一存储在内存中.如果你把它编码为UTF-8,你将无法再安全地跳入数组,因为有些字符用1个字节表示,而其他字符用超过1个字节表示,使得特定索引在内存中的位置不清楚.

    2023-01-09 16:47 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有