Есть ли в стандартной библиотеке сопоставление между именами набора символов Swift String.Encoding и IANA? - PullRequest
2 голосов
/ 12 апреля 2020

Существует ли в стандартной библиотеке сопоставление между перечислением String.Encoding и именами стандартных наборов символов IANA, например, "UTF-8" для String.Encoding.utf8? Я не смог найти его.

Я знаю, что CFStringEncoding Foundation может быть сопоставлен с именами наборов символов IANA, но я не смог найти способ go из String.Encoding в CFStringEncoding. CFStringEncoding - это просто псевдоним типа для UInt32, а перечисление String.Encoding поддерживается UInt, но, если я не допустил простой ошибки, они, похоже, не соответствуют.

1 Ответ

1 голос
/ 12 апреля 2020

Необработанное значение String.Encoding представляет собой NSStringEncoding, и его можно преобразовать в CFStringEncoding с помощью CFStringConvertNSStringEncodingToEncoding. Имя кодировки IANA затем определяется с помощью CFStringConvertEncodingToIANACharSetName. Эта функция возвращает необязательный CFString, который можно бесплатно соединить с необязательным Swift String.

Пример:

let enc = String.Encoding.isoLatin2
let cfEnc = CFStringConvertNSStringEncodingToEncoding(enc.rawValue)
if let ianaName = CFStringConvertEncodingToIANACharSetName(cfEnc) as String? {
    print(ianaName) // iso-8859-2
}
...