下面的例子取自字符串和字符文档:
价值55357
(U+D83D
以十六进制表示)和56374
(U+DC36
以十六进制表示)是形成 Unicode 标量的代理对U+1F436
, 哪一个是DOG FACE
特点。有什么办法可以走另一个方向吗?也就是说,我可以将代理对转换为标量吗?
I tried
let myChar: Character = "\u{D83D}\u{DC36}"
但我收到“无效的 Unicode 标量”错误。
这个 Objective C 的答案 and 这个项目似乎是自定义解决方案,但是 Swift(尤其是 Swift 2.0+)中是否有内置的东西可以做到这一点?
有一些公式可以根据代理对计算原始代码点,反之亦然。从https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae:
Unicode 标准第 3.7 节
3.0定义代理对之间的转换算法。
一个代码点C
比...更棒0xFFFF
对应于代理对<H, L>
根据以下公式:
H = Math.floor((C - 0x10000) / 0x400) + 0xD800
L = (C - 0x10000) % 0x400 + 0xDC00
反向映射,即来自代理对<H, L>
到统一码
代码点C
, 是(谁)给的:
C = (H - 0xD800) * 0x400 + L - 0xDC00 + 0x10000
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)