Swift: Как получить представление символов UTF-8 (как 0xXX 0xXX 0xXX ...)? - PullRequest
2 голосов
/ 21 марта 2020

Я хотел бы получить UTF-8 представление персонажа.

Например, согласно эта веб-страница , ? должна быть 0xF0 0x9F 0x98 0x80, а UTF-16 - 0xD83D 0xDE00.

Я пробовал этот код:

extension String {

    var utf8Representation: String? {
        guard let data = self.data(using: .nonLossyASCII, allowLossyConversion: true), 
              let result = String(data: data, encoding: .utf8) else {
            return nil
        }
        return result
    }

}

Но вот результат, который я получаю:

? = \ud83d\ude00

Это UTF-16, а не представление UTF-8, которое я ожидал.

Что мне делать?

Спасибо за помощь

1 Ответ

3 голосов
/ 21 марта 2020

Преобразование .nonLossyASCII преобразует каждый не-ASCII-символ в escape-последовательность "\uNNNN", поэтому ваш подход не работает.

self.utf8 дает UTF-8 представление String. Затем отформатируйте каждую кодовую точку UTF-8 в виде строки "0xNN" и объедините результаты с пробелами:

extension String {
    var utf8Representation: String {
        return self.utf8.map { String(format: "0x%02hhx", $0) }.joined(separator: " ")
    }

}

Пример:

print("?".utf8Representation)
// 0xf0 0x9f 0x98 0x80
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...