为UTF-8或UTF-16用途设计应用程序
Designing an application for UTF-8 or UTF-16 usage
我正在开发一个主要供英语和西班牙语读者使用的应用程序。然而,在未来,我希望能够支持更多的扩展语言,比如日语。在考虑程序设计时,我遇到了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)。
我认为这是个坏主意。
- 试图在visual studio上用C++创建一个桌面应用程序
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 在C应用程序中运行C++(带有STL)函数
- 使用VerQueryValue检索应用程序的文件描述
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 使用调试/崩溃报告将应用程序部署到客户端
- C++控制台应用程序阻止退出
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 将应用程序从32位移植到64位时出现问题
- 如何改变c++应用程序的视觉效果
- WM_CTLCOLORSTATIC从未在WIN32应用程序中触发
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- phytec phyBOARD iMX-6在从闪存而不是SD卡运行qt5 opengles应用程序时表现不佳(FPS减半
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 为UTF-8或UTF-16用途设计应用程序
- gSOAP到WCF.应用程序/ soap + xml;charset = utf - 8
- 在Windows c++应用程序中验证输入UTF-8序列
- UTF-8在VC++中支持web应用程序