Ryo*_*eko 0 c++ utf-8 utf-16 internationalization surrogate-pairs
我们有一个编写 utf-8 基本编码的应用程序,它支持 utf-8 BMP(3 字节)。但是,有一个要求需要支持代理对。
我在某处读到 utf-8 不支持代理字符。这是真的吗?
如果是,使我的应用程序具有 utf-16 而不是 utf-8 的默认编码的步骤是什么?
我没有代码片段,因为整个应用程序是通过牢记 utf-8 而不是代理字符编写的。
我需要在整个代码中更改哪些项目才能获得 utf-8 中代理对的支持。或者将默认编码更改为 UTF-16。
我们有一个编写 utf-8 基本编码的应用程序,它支持 utf-8 BMP(3 字节)。
为什么不是整个 Unicode 曲目(4 个字节)?为什么仅限于 3 个字节?3 个字节让您支持最多 U+FFFF 的代码点。4 个字节让您支持额外的 1048576 个代码点,一直到 U+10FFFF。
但是,有一个要求需要支持代理对。
代理对仅适用于 UTF-16,不适用于 UTF-8 甚至 UCS-2(UTF-16 的前身)。
我在某处读到 utf-8 不支持代理字符。这是真的吗?
用于编码代理的代码点可以用 UTF-8 物理编码,但是它们被Unicode 标准保留并且在 UTF-16 编码之外使用是非法的。UTF-8 不需要代理对,任何包含代理代码点的解码 Unicode 字符串都应被视为格式错误。
如果是,使我的应用程序具有 utf-16 而不是 utf-8 的默认编码的步骤是什么?
我们无法回答这个问题,因为您没有提供有关如何设置项目、使用的编译器等的任何信息。
但是,您不需要将应用程序切换到 UTF-16。您只需要更新您的代码以支持 UTF-8 的 4 字节编码,并确保在将 16 位数据转换为 UTF-8 时支持代理对。不要将自己限制为 U+FFFF 作为可能的最高代码点。Unicode 的代码点比这多得多。
听起来您的代码在将数据转换为 UTF-8 或从 UTF-8 转换时只处理 UCS-2。只需更新该代码以支持 UTF-16 而不是 UCS-2,你应该没问题。
| 归档时间: |
|
| 查看次数: |
2089 次 |
| 最近记录: |