我想知道为什么在以下各行中得到不同的结果
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
答案 0 :(得分:0)
count
和String
,String.UTF8View
等中的String.UTF16View
是不同的,因为尽管它们都是集合,但它们的存储方式却不同。 String
将它们存储在一个字符集合中,因此集合中的每个项目都代表一个字符。但是,在其他编码中,它们存储在该编码的代码单元的集合中。一些特殊字符(如ñ)必须以两个单位存储。对于ñ,它在UTF8中是0xC3 0xB1
,而在UTF16中是0x00F1
,因此您可以看到,在UTF8编码中,项目多于UTF16。除非使用底数count
,否则无法使用String
准确获得字符数。