【发布时间】:2015-09-25 18:34:10
【问题描述】:
以下示例取自Strings and Characters documentation:
值55357(十六进制的U+D83D)和56374(十六进制的U+DC36)是构成Unicode标量U+1F436的代理对,即DOG FACE字符。有没有办法去另一个方向?也就是说,我可以将代理对转换为标量吗?
我试过了
let myChar: Character = "\u{D83D}\u{DC36}"
但我收到“无效的 Unicode 标量”错误。
This Objective C answer 和 this project 似乎是自定义解决方案,但是 Swift(尤其是 Swift 2.0+)中是否有任何内置功能可以做到这一点?
【问题讨论】:
-
直接指定码位:
\u{1F436}。您链接到let sparklingHeart = "\u{1F496}" // ????, Unicode scalar U+1F496的文档中有一个示例 -
如果我不知道完整的代码点怎么办?也就是说,如果我只知道代理对呢?
-
String有一个init?(_ utf16: String.UTF16View)方法,但我还没有找到如何从给定数组创建String.UTF16View。 – 一个类似的问题(可能的解决方案)在这里:Is there a way to create a String from utf16 array in swift?. -
@MartinR 很抱歉,您已经给出了 utf16 解码答案。虽然您可能还会发现 2.0 版本很有趣。
-
@AirspeedVelocity:stackoverflow.com/a/24757284/1187415 的代码也适用于 Swift 2。它有点长,因为它区分“输入结束”和“错误”条件。
标签: ios swift unicode scalar surrogate-pairs