设计UTF-8或UTF-16使用的应用程序

时间:2012-01-22 04:26:04

标签: c++ algorithm unicode utf-8 utf-16

我正在开发一个主要由英语和西班牙语读者使用的应用程序。但是,将来我希望能够支持更多扩展语言,例如日语。在考虑该程序的设计时,我已经在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”和我的“char_type”的用法,会被视为“坏主意”吗?如果是这样,为什么它被认为是一个坏主意,我怎么能实现我上面提到的呢?

我想使用其中一个的原因是由于内存效率。如果我不使用它,我宁愿不要一直使用UTF-16。

3 个答案:

答案 0 :(得分:5)

UTF-8可以表示每个Unicode字符。如果您的应用程序正确支持UTF-8,那么您可以使用任何语言。

请注意,如果您正在编写Windows应用程序,则Windows的本机控件没有用于在其中设置UTF-8文本的API。但是,很容易制作一个内部使用UTF-8的应用程序,并转换为UTF-8 - >在Windows中设置文本时UTF-16,并转换UTF-16 - >从Windows获取文本时的UTF-8。我已经完成了它,它工作得很棒,并且比编写WCHAR应用程序更好。转换UTF-8< - >是微不足道的。 16; Windows有自己的API,或者您可以在自己的代码中找到一个简单的(单页)函数。

答案 1 :(得分:2)

我相信选择UTF-8足以满足您的需求。请记住,上面的char_type小于两种编码中的字符。

您可能希望看一下这个讨论:https://softwareengineering.stackexchange.com/questions/102205/should-utf-16-be-considered-harmful,了解不同类型的流行编码的好处。

答案 2 :(得分:0)

这基本上是Windows对TCHAR的处理(除了Windows API将char解释为“ANSI”代码页而不是UTF-8)。

I think it's a bad idea.