Sur*_*gch 16 string unicode character ios swift
我想在Swift中使用十六进制值编写Unicode字符串.我已经阅读了String和Character 的文档,所以我知道我可以直接在字符串中使用特殊的Unicode字符,如下所示:
var variableString = "Cat?" // "Cat" + Double Exclamation + cat emoji
Run Code Online (Sandbox Code Playgroud)
但我想使用Unicode代码点来做到这一点.文档(和这个问题)显示了字符,但不清楚如何为字符串做.
(注意:虽然答案现在对我来说显而易见,但在不久之前它并不明显.我在回答下面的问题,作为学习如何做到这一点的一种方法,也是为了帮助自己理解Unicode术语和Swift Characters和Strings如何工作.)
Sur*_*gch 28
针对Swift 3进行了更新
用于形成十六进制代码点的Swift语法是
\u{n}
Run Code Online (Sandbox Code Playgroud)
其中n是一个长达8位的十六进制数.Unicode 标量的有效范围是U + 0到U + D7FF和U + E000到U + 10FFFF(含).(U + D800到U + DFFF范围用于代理对,它们本身不是标量,但在UTF-16中用于编码更高值的标量.)
例子:
// The following forms are equivalent. They all produce "C".
let char1: Character = "\u{43}"
let char2: Character = "\u{0043}"
let char3: Character = "\u{00000043}"
// Higher value Unicode scalars are done similarly
let char4: Character = "\u{203C}" // ? (DOUBLE EXCLAMATION MARK character)
let char5: Character = "\u{1F431}" // (cat emoji)
// Characters can be made up of multiple scalars
let char7: Character = "\u{65}\u{301}" // é = "e" + accent mark
let char8: Character = "\u{65}\u{301}\u{20DD}" // é? = "e" + accent mark + circle
Run Code Online (Sandbox Code Playgroud)
笔记:
字符串由字符组成.有关使用十六进制代码点形成它们的一些方法,请参阅以下示例.
例子:
var string1 = "\u{0043}\u{0061}\u{0074}\u{203C}\u{1F431}" // Cat?
// pass an array of characters to a String initializer
let catCharacters: [Character] = ["\u{0043}", "\u{0061}", "\u{0074}", "\u{203C}", "\u{1F431}"] // ["C", "a", "t", "?", ""]
let string2 = String(catCharacters) // Cat?
Run Code Online (Sandbox Code Playgroud)
在运行时,您可以将十六进制或Int
值转换为a Character
或String
首先将其转换为a UnicodeScalar
.
例子:
// hex values
let value0: UInt8 = 0x43 // 97
let value1: UInt16 = 0x203C // 22823
let value2: UInt32 = 0x1F431 // 127822
// convert hex to UnicodeScalar
let scalar0 = UnicodeScalar(value0)
// make sure that UInt16 and UInt32 form valid Unicode values
guard
let scalar1 = UnicodeScalar(value1),
let scalar2 = UnicodeScalar(value2) else {
return
}
// convert to Character
let character0 = Character(scalar0) // C
let character1 = Character(scalar1) // ?
let character2 = Character(scalar2) //
// convert to String
let string0 = String(scalar0) // C
let string1 = String(scalar1) // ?
let string2 = String(scalar2) //
// convert hex array to String
let myHexArray = [0x43, 0x61, 0x74, 0x203C, 0x1F431] // an Int array
var myString = ""
for hexValue in myHexArray {
if let scalar = UnicodeScalar(hexValue) {
myString.append(Character(scalar))
}
}
print(myString) // Cat?
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9575 次 |
最近记录: |