1

Swift 为字符串提供了一系列编码。截至我写这篇文章的时候,它们都没有被记录在案,这使得这比它应该的更令人困惑......

我可以理解这.ascii意味着它是ASCII编码的,.utf8意味着字符串是UTF-8编码.utf16BigEndian的,并且意味着字符串是UTF-16但是big-endian。这些显然映射到真实的文本编码。

然后是.unicode. 没有“Unicode”编码。Unicode 标准定义了 UTF-8、UTF-16 和 UTF-32,正如我上面所说,它们已经在 Swift 中定义。

它是一种可以为系统找出最佳方案的花哨吗?它是 的别名.utf8吗?是不是有些奇怪的 Apple Unicode 编码?

4

1 回答 1

3

它似乎是.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)
于 2019-10-09T00:19:21.280 回答