与其他一些表情符号字符一样,0x0001F1E9 0x0001F1EA组合(德国标志)在屏幕上表示为单个字符,尽管它实际上是两个不同的Unicode字符点组合在一起。它在Swift中表示为一个或两个不同的字符吗?
答案 0 :(得分:24)
let flag = "\u{1f1e9}\u{1f1ea}"
然后flag
是。
有关更多区域指标符号,请参阅:
http://en.wikipedia.org/wiki/Regional_Indicator_Symbol
答案 1 :(得分:6)
支持"扩展的字形集群"在此期间,Swift已被添加到了Swift中。 迭代字符串的字符会产生单个字符 "标志":
let string = "Hi!"
for char in string.characters {
print(char)
}
输出:
H i !
答案 2 :(得分:5)
Swift 3在其String
结构中实现了Unicode。在Unicode中,所有标志都是Regional Indicator Symbols对。因此,实际上是
,后跟
(尝试复制这两个并将它们粘贴在彼此旁边!)。
当两个或多个区域指示符号彼此相邻放置时,它们形成“扩展字形集群”,这意味着它们被视为一个字符。这就是" = ...".characters
为您提供["", " ", "=", " ", "", ".", ".", "."]
。
如果您想查看每个Unicode代码点(AKA“标量”),可以使用.unicodeScalars
,以便"Hi!".unicodeScalars
为您提供["H", "i", "", "", "!"]
是一个 字符 (在Swift和Unicode中),由两个 代码点 组成(AKA标量)。不要忘记这些是不同的!
答案 3 :(得分:2)
Swift没有告诉你String
的内部表示是什么。您使用String
作为全尺寸(32位)Unicode代码点列表进行交互:
for character in "Dog!" {
println(character)
}
// prints D, o, g, !,
如果要将字符串作为UTF-8或UTF-16代码点序列使用,请使用其utf8
或utf16
属性。请参阅文档中的Strings and Characters。
答案 4 :(得分:0)
使用Swift 5,您可以遍历标志表情符号字符的unicodeScalars
属性,以打印组成它的Unicode标量值:
let emoji: Character = ""
for scalar in emoji.unicodeScalars {
print(scalar)
}
/*
prints:
*/
如果将这些标量(是区域指标符号)组合在一起,则会得到一个标志表情符号:
let italianFlag = "" + ""
print(italianFlag) // prints:
print(italianFlag.count) // prints: 1
每个Unicode.Scalar
实例还具有属性value
,可使用该属性来显示其数字表示形式:
let emoji: Character = ""
for scalar in emoji.unicodeScalars {
print(scalar.value)
}
/*
prints:
127470
127481
*/
您可以从这些数字表示形式创建Unicode标量,然后将它们关联为字符串:
let scalar1 = Unicode.Scalar(127470)
let scalar2 = Unicode.Scalar(127481)
let italianFlag = String(scalar1!) + String(scalar2!)
print(italianFlag) // prints:
print(italianFlag.count) // prints: 1
如果需要,可以使用Unicode.Scalar
的{{3}}方法来显示Unicode标量的字符串表示形式(使用ASCII字符):
let emoji: Character = ""
for scalar in emoji.unicodeScalars {
print(scalar.escaped(asASCII: true))
}
/*
prints:
\u{0001F1EE}
\u{0001F1F9}
*/
let italianFlag = "\u{0001F1EE}\u{0001F1F9}"
print(italianFlag) // prints:
print(italianFlag.count) // prints: 1
String
的{{3}}也可能与将标量值转换为十六进制值有关:
let emoji: Character = ""
for scalar in emoji.unicodeScalars {
print(String(scalar.value, radix: 16, uppercase: true))
}
/*
prints:
1F1EE
1F1F9
*/
let italianFlag = "\u{1F1EE}\u{1F1F9}"
print(italianFlag) // prints:
print(italianFlag.count) // prints: 1