在阅读Swift 官方文档的字符串和字符章节时,我发现了下面这句话“每个字符串都由与编码无关的 Unicode 字符组成,并提供对以各种 Unicode 表示形式访问这些字符的支持”
问题编码无关到底是什么意思?
从我阅读 Chris 的《Advanced Swift》和其他经验来看,这句话试图传达的内容可以有两层。
首先,各种unicode表示形式是什么:
右侧的数字表示一个字符在表示或存储时将占用多少位。
对于一个字符,UTF-8需要8位,而UTF-32需要32位。
然而,一个可以用 1 个 UTF-32 内存表示的汉字可能并不总是适合 1 个 UTF-16 内存块。如果字符获取全部 32 位,那么在 UTF-8 中它的计数将为 4。
然后是存储部分。当您在字符串中存储一个字符时,以后如何读取它并不重要。
每个字符串都由与编码无关的 Unicode 字符组成,并提供对以各种 Unicode 表示形式访问这些字符的支持
这意味着,您可以按照您喜欢的任何方式组成字符串。当读取各种 unicode 编码格式(如 UTF-8、16 或 32)时,这不会影响表示。
在上面的例子中可以清楚地看到这一点,当我尝试加载一个占用 24 位来存储的日语字符时。无论我选择何种编码,都会显示相同的字符。
然而,计数值会有所不同。还有其他一些需要考虑的点,例如组成此字符串的代码单元和代码点。
我强烈建议阅读这篇文章,它更深入地介绍了 swift 中的 String api。 swift 中 String API 的详细视图
| 归档时间: |
|
| 查看次数: |
240 次 |
| 最近记录: |