编码无关到底是什么意思

SLN*_*SLN 2 string swift

在阅读Swift 官方文档的字符串和字符章节时,我发现了下面这句话“每个字符串都由与编码无关的 Unicode 字符组成,并提供对以各种 Unicode 表示形式访问这些字符的支持

问题编码无关到底是什么意思?

kan*_*aya 6

从我阅读 Chris 的《Advanced Swift》和其他经验来看,这句话试图传达的内容可以有两层。

首先,各种unicode表示形式是什么:

  1. UTF-8 :与 ASCII 兼容
  2. UTF-16
  3. UTF-32

右侧的数字表示一个字符在表示或存储时将占用多少位。

对于一个字符,UTF-8需要8位,而UTF-32需要32位。

然而,一个可以用 1 个 UTF-32 内存表示的汉字可能并不总是适合 1 个 UTF-16 内存块。如果字符获取全部 32 位,那么在 UTF-8 中它的计数将为 4。

然后是存储部分。当您在字符串中存储一个字符时,以后如何读取它并不重要。

例如: 在此输入图像描述

每个字符串都由与编码无关的 Unicode 字符组成,并提供对以各种 Unicode 表示形式访问这些字符的支持

这意味着,您可以按照您喜欢的任何方式组成字符串。当读取各种 unicode 编码格式(如 UTF-8、16 或 32)时,这不会影响表示。

在上面的例子中可以清楚地看到这一点,当我尝试加载一个占用 24 位来存储的日语字符时。无论我选择何种编码,都会显示相同的字符。

然而,计数值会有所不同。还有其他一些需要考虑的点,例如组成此字符串的代码单元和代码点。

对于 Unicode 编码变体

我强烈建议阅读这篇文章,它更深入地介绍了 swift 中的 String api。 swift 中 String API 的详细视图