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

时间:2016-08-04 23:51:47

标签: swift unicode integer

A user askedone of my answers提出以下问题。

  

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

我打算将它们引用到另一个Stack Overflow Q& A但我无法找到它。这些是指转换另一个方向:

这些似乎是在询问如何将字符串形式的数字转换为实际的Int(如将"1"转换为1)。

我将在下面提供一个答案,而不是试图将我的答案放在对提问者的评论中。 \u{0D85}的类型有点不清楚,但我将介绍各种可能性。

2 个答案:

答案 0 :(得分:7)

Hex to Int

如果您从\u{0D85}开始并且您知道Unicode字符的十六进制值,那么您也可以使用以下格式编写它,因为它已经是Int

let myInt = 0x0D85                          // Int: 3461

String to Int

我假设你有"\u{0D85}"(引号),默认情况下它为String。由于它是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)更容易。 (有关详细信息,请参阅this answer。)

Int的字符

Swift Characterextended grapheme cluster,没有utf16unicodeScalars属性,因此如果您从Character开始,请转换它首先到String,然后按照上面 String to Int 部分中的说明进行操作。

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

答案 1 :(得分:1)

在Swift 4.2中,Unicode.Scalar具有value属性。 value具有以下声明:

  

Unicode标量的数字表示形式。

var value: UInt32 { get }

以下Playground示例代码说明如何遍历unicodeScalarsCharacter的{​​{1}}属性并打印每个Unicode标量的String值:

Int32
let char: Character = "\u{0D85}"

for scalar in char.unicodeScalars {
    print(scalar.value)
}

/*
 prints: 3461
 */