我仍然在试图确定是否我的(家庭)的项目应该使用 UTF-8 串(实施方面的std::string与其他UTF-8特定功能的必要时)或某些16bit string(实现为std::wstring).该项目是一种编程语言和环境(如VB,这是两者的结合).

有几个希望/制约因素:

  • 这将是很酷的,如果它能运行有限的硬件,例如计算机有限的记忆。
  • 我想代码上运行,和(如果资源允许的)。
  • 我会使用 个函数库和二进制文 作为我的GUI层,但是我希望代码,与该工具包局限在一个角落里的代码(我将非GUI可执行).
  • 我想要避免工作有两种不同的字符串的工作时,与用户可见的文字和应用程序的数据。

目前,我正与std::string,目的是使用UTF-8操纵功能,只有当必要的。它需要较少的存储器,似乎是向许多应用都将无论如何。

如果你推荐一个16位编码,其一: UTF-16? UCS-2?另一个呢?

有帮助吗?

解决方案

我会推荐UTF-16用于任何种类的数据操作和用户界面。Mac OS X和Win32API使用UTF-16,同多个函数库和二进制文,脱,重症监护病房,了xerces,和其他人。UTF-8可能是更好的数据交换和储存。看看 http://unicode.org/notes/tn12/.

但无论你选择什么,我肯定会推荐反对std::string与UTF-8"只有当必要的"。

去所有的方式与UTF-16或UTF-8,但是不混合和匹配,这是自寻烦恼。

其他提示

UTF-16仍然是一个变长字符编码(有超过2^16unicode代码点),所以你不能这样做O(1)串编制索引业务。如果你这样做很多的事情,你是不存在任何转速超过UTF-8。另一方面,如果文本包括一个很大的代码点在256-65535范围内,UTF-16型可以是一个实质性改善的大小。UCS-2是一个变化UTF-16, 固定长度,以禁止任何代码点大于2^16.

不知道更多关于你的要求,我将亲自去UTF-8。这是最简单的到处理的所有原因,其他人已经列出。

我从来没有发现任何理由使用其他任何东西比UTF-8是诚实的。

如果你决定要去UTF-8编码,看看这个图书馆: http://utfcpp.sourceforge.net/

它可能使你的生活变得更加容易。

其实我已经写了一个广泛使用的应用程序(5million+用户)因此,每千字节的使用增加了,从字面上。尽管如此,我坚持wxString.我已经配置,它是源自性病::wstring,因此我可以通过他们的职能期待一个wstring const&.

请注意,std::wstring原Unicode在Mac(没有UTF-16需要人物以上的U+10000),因此其使用4个字节/wchar_t.大优点是,我++得到你的下一个字,永远。在Win32这是真的在只有99.9%的情况下。作为一个研究员的程序员,你就会明白怎么一点99.9%。

但如果你不相信,写信的功能,以大写std::string[UTF-8]和性病::wstring.这些2职能将告诉你哪些方式是精神错乱。

你在盘格式的另一个问题。为了便于携带,应UTF-8。没有字节序的关切UTF-8,也没有讨论过宽(2/4).这可能是为什么许多程序出现使用UTF-8。

在一个稍微不相关的注意,请读了Unicode串comparisions和正常化。或者你会有同样的错误。净,你在哪里可以有两种变量föö和föö不同的只是在(无形的)正常化。

MicroATX是相当多的一个标准的电脑主机板格式,最有能力的4-8GB。如果你在说picoATX也许你是有限的1-2GB RAM。即使那时,许多用于发展的环境。我仍然坚持UTF-8由于上述理由,但是存储器不应该是你的关心。

从我读的,这是更好地使用的16位编码境内,除非你在很短的存储器。这符合几乎所有生活的语言在一个字

我也想看看 重症监护病房.如果你们不会被使用某些STL功能字符串中使用的伊斯兰法院联盟串的类型可能会对你更好。

你有没有考虑使用wxStrings?如果我没有记错的话,他们可以做utf-8 <->Unicode的转换并且它将使它更容易一点,当你有串通,并从用户界面。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top