【发布时间】:2012-11-05 14:58:08
【问题描述】:
根据这个article,从iOS4到iOS6支持emoji字符的正确方法是使用utf8mb4编码。 App Engine 的数据存储区是否支持 utf8mb4?目前我在我的 iOS 应用程序中使用 Java 版本的 App Engine 作为后端。
【问题讨论】:
标签: ios google-app-engine emoji utf8mb4
根据这个article,从iOS4到iOS6支持emoji字符的正确方法是使用utf8mb4编码。 App Engine 的数据存储区是否支持 utf8mb4?目前我在我的 iOS 应用程序中使用 Java 版本的 App Engine 作为后端。
【问题讨论】:
标签: ios google-app-engine emoji utf8mb4
首先,您链接到的文章讲述了作者使用mysql 作为数据库开发iOS 应用程序的经验。在 mysql 中,编码“utf8”仅表示长度为 1、2 或 3 个字节的字符。
但是,根据定义,utf8 支持 1、2、3 或 4 字节长的字符。因此,在 mysql 编码和排序规则的上下文中,utf8 意味着最多只有 3 个字节的字符。对于 4 字节长的字符,mysql 设计了 utf8mb4 编码。
但是,这仅适用于 mysql 上下文。在 mysql 世界之外,utf8 自动意味着支持 1、2、3 或 4 字节字符。请参阅UTF-8 wikipedia page,它在介绍性段落中谈到了这一点:
UTF-8 对 Unicode 中的 1,112,064[7] 个代码点中的每一个进行编码 使用一到四个 8 位字节的字符集(在 Unicode 标准)。
因此,当平台或软件应用程序声称支持 UTF-8 时,这意味着支持所有 1,112,064 个代码点,每个字符可以消耗 1、2、3 或 4 个字节。
mysql 案例是一个异常情况,其中 utf8 编码并不是真正的 100% utf8,而是 utf-8 的大约 6%(但大多数人不会注意到这一点,除非他们开始使用表情符号或其他字符)。
所以我的建议是,当谷歌应用引擎接受 utf-8 作为它们支持的有效编码时,可以安全地假设它们支持 4 字节字符。
【讨论】: