count,utf8.count,utf16.count返回不同的结果

时间:2018-12-15 03:56:05

标签: swift

我想知道为什么在以下各行中得到不同的结果

let spain = "España"
print (spain.count) -- return 6
print (spain.utf8.count) -- return 7
print (spain.utf16.count) -- return 6
print (spain.utf8CString.count) -- return 8

1 个答案:

答案 0 :(得分:0)

countStringString.UTF8View等中的String.UTF16View是不同的,因为尽管它们都是集合,但它们的存储方式却不同。 String将它们存储在一个字符集合中,因此集合中的每个项目都代表一个字符。但是,在其他编码中,它们存储在该编码的代码单元的集合中。一些特殊字符(如ñ)必须以两个单位存储。对于ñ,它在UTF8中是0xC3 0xB1,而在UTF16中是0x00F1,因此您可以看到,在UTF8编码中,项目多于UTF16。除非使用底数count,否则无法使用String准确获得字符数。