如何在Swift中将Unicode字符转换为整数

13

一个用户我的回答之一提出了以下问题。

我有一个 Unicode 字符 \u{0D85}。如何从中获取 Int 值?

我本来想将他们引用到另一个 Stack Overflow 的问答,但我找不到一个合适的。以下是转换方向的参考:

以下似乎是在询问如何将字符串形式的数字转换为实际的Int(例如将“1”转换为1)。 与其试图将我的答案放入评论中回答者,我将在下面提供一个答案。 \ u {0D85}的类型有些不清楚,但我将涵盖各种可能性。
2个回答

11

十六进制转整数

如果你从 \u{0D85} 开始,并且知道 Unicode 字符的十六进制值,那么你可以直接以下面的格式写出它,因为它已经是一个 Int 了。

let myInt = 0x0D85                          // Int: 3461

字符串转换为整数

我假设你有一个默认为String类型的字符串"\u{0D85}"(带引号)。由于它是一个String,你无法确定在一般情况下是否只有一个Int值。

let myString = "\u{0D85}"

for element in myString.unicodeScalars {
    let myInt = element.value               // UInt32: 3461
}

我也可以使用 myString.utf16let myInt = Int(element),但是当涉及到像表情符号这样的情况时,我发现处理 Unicode 标量值(UTF-32)更容易。 (有关更多详细信息,请参见 此答案。)

字符到整数的转换

Swift 的 Character 是一个扩展图形簇,它没有 utf16unicodeScalars 属性,因此如果你从 Character 开始,则先将其转换为 String,然后按照上面字符串到整数部分的说明进行转换。

let myChar: Character = "\u{0D85}"
let myString = String(myChar)

有关将 Int 转换为 CharacterString,请参见此答案:https://dev59.com/LF0Z5IYBdhLWcg3wlRMV#31284539 - Suragch
现在的字符确实有一个unicodeScalars属性。请参考Imanou Petit的答案中的示例。 - Rob Napier

3
使用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
 */

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接