【发布时间】:2012-02-16 01:17:18
【问题描述】:
我正在开发一个主要供英语和西班牙语读者使用的应用程序。但是,将来我希望能够支持更多的扩展语言,例如日语。在考虑程序的设计时,我在 UTF-8 与 UTF-16 与多字节之间碰壁了。我想编译我的程序以支持 UTF-8 或 UTF-16(用于使用中文等语言时)。为此,我在想我应该拥有诸如
之类的东西#if _UTF8
typedef char char_type;
#elif _UTF16
typedef unsigned short char_type;
#else
#error
#endif
这样,以后当我使用 UTF-16 时,我可以切换 #define (当然,对于 sprintf 等事物,我可以使用相同类型的 #if/#endif)。我有自己的自定义字符串类型,所以也可以使用这种情况。
在上面提到的场景中用我的“char_type”替换每次使用“char”的单次使用会被认为是“坏主意”吗?如果是这样,为什么它被认为是一个坏主意,我该如何实现我上面提到的?
我想使用其中一个的原因是由于内存效率。如果我不使用它,我宁愿不要一直使用 UTF-16。
【问题讨论】:
-
那么英语和西班牙语是“基本”语言,而日语是“扩展”语言?例如,基本医疗保健与牙齿美白?
-
别打扰了。如果可以的话,使用
char32_t将您的内部表示设为UTF32,并提供干净的接口。 -
重点是你不应该认为任何一种语言比任何其他语言都更基础。只需从一开始就设计您的程序以处理所有输入,您将获得更清晰的结果。 (另外,永远不要在内部使用 UTF16,因为它是一种痛苦而没有收获。它仍然是可变长度的,并且它增加了其他问题。您无需担心程序内存中的空间。)
-
我会提高内存效率,而不是总是使用尽可能大的值
-
我还没有遇到过 wchar_t 让我的生活更轻松的情况。它一直造成混乱并增加了复杂性。
标签: c++ algorithm unicode utf-8 utf-16