【问题标题】:How to convert Unicode Character to Int in Swift如何在 Swift 中将 Unicode 字符转换为 Int
【发布时间】:2016-12-11 06:31:29
【问题描述】:
A user asked 将以下问题发送至one of my answers。
我有一个 unicode 字符 \u{0D85}。如何从中获取Int 值?
我打算将他们推荐给另一个 Stack Overflow Q&A,但我找不到。这些是指转换另一个方向:
这些似乎是在询问如何将字符串形式的数字转换为实际的Int(如将"1" 转换为1)。
我将在下面提供一个答案,而不是试图将我的答案放在对提问者的评论中。 \u{0D85} 的类型有点不清楚,但我会介绍各种可能性。
【问题讨论】:
标签:
swift
unicode
integer
【解决方案1】:
十六进制转整数
如果您以\u{0D85} 开头并且知道Unicode 字符的十六进制值,那么您不妨按照以下格式编写它,因为它已经是Int。
let myInt = 0x0D85 // Int: 3461
字符串到整数
不过,我假设您有"\u{0D85}"(引号),默认情况下它是String。由于它是 String,因此您不能确定在一般情况下您只会有一个 Int 值。
let myString = "\u{0D85}"
for element in myString.unicodeScalars {
let myInt = element.value // UInt32: 3461
}
我也可以使用myString.utf16 和let myInt = Int(element),但我发现处理 Unicode 标量值 (UTF-32) 时更容易处理像表情符号之类的东西。 (详情请参阅this answer。)
Int 的字符
Swift Character,它是一个extended grapheme cluster,没有utf16 或unicodeScalars 属性,所以如果你以Character 开头,那么先将其转换为String,然后按照上面 String 到 Int 部分中的说明。
let myChar: Character = "\u{0D85}"
let myString = String(myChar)
【解决方案2】:
在 Swift 5 中,Unicode.Scalar 有一个 value 属性。 value 有以下声明:
Unicode 标量的数字表示。
var value: UInt32 { get }
以下 Playground 示例代码展示了如何迭代 Character 或 String 的 unicodeScalars 属性并打印每个 Unicode 标量的 Int32 值:
let char: Character = "\u{0D85}"
for scalar in char.unicodeScalars {
print(scalar.value)
}
/*
prints: 3461
*/
let str: String = "\u{0D85}"
for scalar in str.unicodeScalars {
print(scalar.value)
}
/*
prints: 3461
*/