我正在开发一个主要由英语和西班牙语读者使用的应用程序。但是,将来我希望能够支持更多扩展语言,例如日语。在考虑该程序的设计时,我已经在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。
答案 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)。