如果您对Mongolian的细节不感兴趣,但只想快速回答有关在Swift中使用和转换Unicode值的问题,请跳到接受答案的第一部分.
我想渲染传统蒙古语的 Unicode文本,以便在iOS应用程序中使用.更好和长期的解决方案是使用AAT智能字体来渲染这个复杂的脚本.(这些字体确实存在,但它们的许可证不允许修改和非个人使用.)但是,由于我从未制作过字体,更不用说AAT字体的所有渲染逻辑了,我只是打算自己进行渲染.斯威夫特现在.也许在以后我可以学习制作智能字体.
在外部我将使用Unicode文本,但在内部(在a中显示UITextView)我将Unicode转换为以哑字体存储的单个字形(用Unicode PUA值编码).所以我的渲染引擎需要将蒙古语Unicode值(范围:U + 1820到U + 1842)转换为存储在PUA中的字形值(范围:U + E360到U + E5CF).无论如何,这是我的计划,因为它是我过去在Java中所做的,但也许我需要改变我的整个思维方式.
下图显示su在蒙古语中使用两种不同形式的字母u(红色)两次写入.(蒙古文是垂直书写的,字母连接像英文草书一样.)

在Unicode中,这两个字符串将表示为
var suForm1: String = "\u{1830}\u{1826}"
var suForm2: String = "\u{1830}\u{1826}\u{180B}"
Run Code Online (Sandbox Code Playgroud)
自由变量选择器(U + 180B)in suForm2被Swift识别(正确)String为与其前面的u(U + 1826)的单位.Swift认为它是一个单一的字符,一个扩展的字形集群.但是,为了自己进行渲染,我需要将u(U + 1826)和FVS1(U + 180B)区分为两个不同的UTF-16代码点.
出于内部显示的目的,我将上述Unicode字符串转换为以下呈现的字形字符串:
suForm1 = "\u{E46F}\u{E3BA}"
suForm2 = "\u{E46F}\u{E3BB}"
Run Code Online (Sandbox Code Playgroud)
我一直在玩Swift String和Character.关于它们有很多方便的东西,但是因为在我的特殊情况下我只使用UTF-16代码单元,我想知道我是否应该使用旧的NSString而不是Swift的String.我意识到我可以String.utf16 …
我想在Swift中使用十六进制值编写Unicode字符串.我已经阅读了String和Character 的文档,所以我知道我可以直接在字符串中使用特殊的Unicode字符,如下所示:
var variableString = "Cat?" // "Cat" + Double Exclamation + cat emoji
Run Code Online (Sandbox Code Playgroud)
但我想使用Unicode代码点来做到这一点.文档(和这个问题)显示了字符,但不清楚如何为字符串做.
(注意:虽然答案现在对我来说显而易见,但在不久之前它并不明显.我在回答下面的问题,作为学习如何做到这一点的一种方法,也是为了帮助自己理解Unicode术语和Swift Characters和Strings如何工作.)
我有一个unicode角色
\u{0D85}.我如何从中获得Int价值?
我打算将它们引用到另一个Stack Overflow Q&A,但我找不到一个.这些是指转换另一个方向:
这些似乎是在询问如何将字符串形式的数字转换为实际数字Int(如转换"1"为1).
我将在下面提供一个答案,而不是试图将我的答案放在对提问者的评论中.类型\u{0D85}有点不清楚,但我将涵盖各种可能性.