How to express Strings in Swift using Unicode hexadecimal values (UTF-16) How to express Strings in Swift using Unicode hexadecimal values (UTF-16) swift swift

How to express Strings in Swift using Unicode hexadecimal values (UTF-16)


Updated for Swift 3

Character

The Swift syntax for forming a hexadecimal code point is

\u{n}

where n is a hexadecimal number up to 8 digits long. The valid range for a Unicode scalar is U+0 to U+D7FF and U+E000 to U+10FFFF inclusive. (The U+D800 to U+DFFF range is for surrogate pairs, which are not scalars themselves, but are used in UTF-16 for encoding the higher value scalars.)

Examples:

// 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 similarlylet char4: Character = "\u{203C}" // ‼ (DOUBLE EXCLAMATION MARK character)let char5: Character = "\u{1F431}" // 🐱 (cat emoji)// Characters can be made up of multiple scalarslet char7: Character = "\u{65}\u{301}" // é = "e" + accent marklet char8: Character = "\u{65}\u{301}\u{20DD}" // é⃝ = "e" + accent mark + circle

Notes:

String

Strings are composed of characters. See the following examples for some ways to form them using hexadecimal code points.

Examples:

var string1 = "\u{0043}\u{0061}\u{0074}\u{203C}\u{1F431}" // Cat‼🐱// pass an array of characters to a String initializerlet catCharacters: [Character] = ["\u{0043}", "\u{0061}", "\u{0074}", "\u{203C}", "\u{1F431}"] // ["C", "a", "t", "‼", "🐱"]let string2 = String(catCharacters) // Cat‼🐱

Converting Hex Values at Runtime

At runtime you can convert hexadecimal or Int values into a Character or String by first converting it to a UnicodeScalar.

Examples:

// hex valueslet value0: UInt8  = 0x43     // 97let value1: UInt16 = 0x203C   // 22823let value2: UInt32 = 0x1F431  // 127822// convert hex to UnicodeScalarlet scalar0 = UnicodeScalar(value0)// make sure that UInt16 and UInt32 form valid Unicode valuesguard    let scalar1 = UnicodeScalar(value1),    let scalar2 = UnicodeScalar(value2) else {    return}// convert to Characterlet character0 = Character(scalar0) // Clet character1 = Character(scalar1) // ‼let character2 = Character(scalar2) // 🐱// convert to Stringlet string0 = String(scalar0) // Clet string1 = String(scalar1) // ‼let string2 = String(scalar2) // 🐱// convert hex array to Stringlet myHexArray = [0x43, 0x61, 0x74, 0x203C, 0x1F431] // an Int arrayvar myString = ""for hexValue in myHexArray {    if let scalar = UnicodeScalar(hexValue) {        myString.append(Character(scalar))    }}print(myString) // Cat‼🐱

Further reading


from your Hex "0x1F52D" to actual Emoji

let c = 0x1F602

next step would possibly getting an Uint32 from your Hex

let intEmoji = UnicodeScalar(c!).value

from this you can do something like

titleLabel.text = String(UnicodeScalar(intEmoji)!)

here you have a "😂"

it work with range of hexadecimal too

let emojiRanges = [            0x1F600...0x1F636,            0x1F645...0x1F64F,            0x1F910...0x1F91F,            0x1F30D...0x1F52D        ]        for range in emojiRanges {            for i in range {                let c = UnicodeScalar(i)!.value                data.append(c)            }        }

to get multiple UInt32 from your Hex range for exemple