aggiornato per Swift 3
carattere
La sintassi Swift per la formazione di un esadecimale code point è
\u{n}
dove n è un numero esadecimale di lunghezza massima di 8 cifre. L'intervallo valido per un Unicode scalar è da U + 0 a U + D7FF e da U + E000 a U + 10FFFF inclusi. (U + D800 gamma U + DFFF è per surrogate pairs, che non sono scalari stessi, ma vengono utilizzati in UTF-16 per codificare i scalari di maggior valore.)
Esempi:
// 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
Note :
- zeri possono essere aggiunti o omesse
- caratteri sono noti come 0.123.174,393 mila. Anche quando sono composti da più scalari, sono ancora considerati un singolo personaggio. La chiave è che sembrano essere un singolo personaggio (grafema) per l'utente.
- TODO: How to convert surrogate pair to Unicode scalar in Swift
String
stringhe sono composte di caratteri. Vedere i seguenti esempi per alcuni modi per crearli usando punti di codice esadecimali.
Esempi:
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‼
conversione di valori esadecimali a runtime
In fase di esecuzione è possibile convertire i valori esadecimali o Int
in un Character
o String
dalla prima convertirlo in un UnicodeScalar
.
Esempi:
// 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‼
Letture
@Suragch Ho un carattere Unicode '\ u {} 0D85'. Come ottengo il valore Int da esso? – Isuru
@Isuru, ho chiesto nuovamente e risposto alla tua domanda qui: [Come convertire Unicode Character in Int in Swift] (http://stackoverflow.com/questions/38779114/how-to-convert-unicode-character-to -int-in-swift) – Suragch
@Suragch Grazie mille per la risposta dettagliata. In realtà ho trovato come farlo in questa [risposta] (http://stackoverflow.com/a/24102584/1077789). Ma ancora, bello avere una spiegazione approfondita. – Isuru