为UTF-8或UTF-16用途设计应用程序

Designing an application for UTF-8 or UTF-16 usage

本文关键字:应用程序 UTF-8 UTF-16      更新时间:2023-10-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_type"替换每次使用的"char",会被认为是一个"坏主意"吗?如果是这样的话,为什么这被认为是一个坏主意?我如何才能实现我上面提到的目标?

我之所以想使用其中一个,是因为内存效率。如果我不使用UTF-16,我宁愿不一直使用它。

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

请注意,如果您正在编写Windows应用程序,Windows的本机控件中没有设置UTF-8文本的API。然而,制作一个内部使用UTF-8的应用程序很容易,在Windows中设置文本时转换UTF-8->UTF-16,在从Windows获取文本时转换UTF-16->UTF-8。我已经做过了,它非常棒,比编写WCHAR应用程序好得多。转换UTF-8<->很简单16;Windows有它的API,或者你可以在自己的代码中找到一个简单的(一页)函数来实现它。

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

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

这基本上就是Windows对TCHAR所做的(除了Windows API将char解释为"ANSI"代码页而不是UTF-8)。

我认为这是个坏主意。