Что такое String.Encoding.unicode?
Swift предлагает серию кодировок для строк. На тот момент, когда я пишу это, ни один из них не задокументирован, что делает это до абсурда более запутанным, чем должно быть...
я могу понять, что .ascii
означает, что он закодирован в ASCII, .utf8
означает, что строка закодирована в UTF-8, и .utf16BigEndian
означает, что строка имеет формат UTF-16, но с прямым порядком байтов. Очевидно, они соответствуют реальным текстовым кодировкам.
Тогда есть .unicode
. Кодировки "Юникод" нет. Стандарт Unicode определяет UTF-8, UTF-16 и UTF-32, которые, как я сказал выше, уже определены в Swift.
Это что-то необычное, которое определяет лучший вариант для системы? Это псевдоним для.utf8
? Это какая-то странная кодировка Apple Unicode?
1 ответ
Похоже, это псевдоним для .utf16
. ОтCFString.h
:
#define kCFStringEncodingInvalidId (0xffffffffU)
typedef CF_ENUM(CFStringEncoding, CFStringBuiltInEncodings) {
kCFStringEncodingMacRoman = 0,
kCFStringEncodingWindowsLatin1 = 0x0500, /* ANSI codepage 1252 */
kCFStringEncodingISOLatin1 = 0x0201, /* ISO 8859-1 */
kCFStringEncodingNextStepLatin = 0x0B01, /* NextStep encoding*/
kCFStringEncodingASCII = 0x0600, /* 0..127 (in creating CFString, values greater than 0x7F are treated as corresponding Unicode value) */
kCFStringEncodingUnicode = 0x0100, /* kTextEncodingUnicodeDefault + kTextEncodingDefaultFormat (aka kUnicode16BitFormat) */
kCFStringEncodingUTF8 = 0x08000100, /* kTextEncodingUnicodeDefault + kUnicodeUTF8Format */
kCFStringEncodingNonLossyASCII = 0x0BFF, /* 7bit Unicode variants used by Cocoa & Java */
kCFStringEncodingUTF16 = 0x0100, /* kTextEncodingUnicodeDefault + kUnicodeUTF16Format (alias of kCFStringEncodingUnicode) */
kCFStringEncodingUTF16BE = 0x10000100, /* kTextEncodingUnicodeDefault + kUnicodeUTF16BEFormat */
kCFStringEncodingUTF16LE = 0x14000100, /* kTextEncodingUnicodeDefault + kUnicodeUTF16LEFormat */
kCFStringEncodingUTF32 = 0x0c000100, /* kTextEncodingUnicodeDefault + kUnicodeUTF32Format */
kCFStringEncodingUTF32BE = 0x18000100, /* kTextEncodingUnicodeDefault + kUnicodeUTF32BEFormat */
kCFStringEncodingUTF32LE = 0x1c000100 /* kTextEncodingUnicodeDefault + kUnicodeUTF32LEFormat */
};
Вы можете подтвердить это с помощью:
print(String.Encoding.unicode.rawValue, String.Encoding.utf16.rawValue)