Car*_*org 12 c++ encoding ucs2 utf-8 stdstring
我仍在尝试决定我的(home)项目是否应该使用UTF-8字符串(在必要时使用std :: string和其他特定于UTF-8的函数实现)或一些16位字符串(实现为std: :wstring的).该项目是一种编程语言和环境(如VB,它是两者的结合).
有一些愿望/约束:
目前,我正在使用std :: string,目的是仅在必要时使用UTF-8操作函数.它需要更少的内存,似乎是许多应用程序正在进行的方向.
Nic*_*son 26
UTF-16仍然是一个可变长度的字符编码(有超过2 ^ 16个unicode代码点),因此你不能做O(1)字符串索引操作.如果你做了很多这样的事情,你就不会在速度上超过UTF-8.另一方面,如果您的文本包含256-65535范围内的许多代码点,则UTF-16的大小可以大幅提升.UCS-2是UTF-16的变体,它是固定长度的,代价是禁止任何大于2 ^ 16的代码点.
如果不了解您的要求,我个人会选择UTF-8.由于其他人已经列出的所有原因,这是最容易处理的.
小智 2
我建议对任何类型的数据操作和 UI 使用 UTF-16。Mac OS X 和 Win32 API 使用 UTF-16,wxWidgets、Qt、ICU、Xerces 等也是如此。UTF-8 可能更适合数据交换和存储。请参阅http://unicode.org/notes/tn12/。
但无论你选择什么,我绝对建议“仅在必要时”不要使用 UTF-8 的 std::string 。
一路使用UTF-16或UTF-8,但不要混合搭配,那是自找麻烦。