Что такое String.Encoding.unicode? - PullRequest
1 голос
/ 09 октября 2019

Swift предлагает серию кодировок для струн. На момент написания этой статьи, ни один из них не задокументирован , что делает это нелепо более запутанным, чем должно быть ...

Я могу понять, что .ascii означает, что кодируется ASCII , .utf8 означает, что строка UTF-8 кодирована, а .utf16BigEndian означаетстрока UTF-16 , но big-endian . Это, очевидно, соответствует реальному текстовому кодированию.

Тогда есть .unicode. Нет кодировки "Юникод". Стандарт Unicode определяет UTF-8, UTF-16 и UTF-32 , которые, как я уже говорил выше, уже определены в Swift.

Это причудливыйкакой из них лучше всего подходит для системы? Это псевдоним для .utf8? Это какая-то странная кодировка Apple Unicode?

1 Ответ

2 голосов
/ 09 октября 2019

Казалось бы, псевдоним для .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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...