【发布时间】:2009-09-30 17:59:13
【问题描述】:
我正在编写一些可供内部和客户使用的库,我想知道同时支持 Unicode 和 ASCII 的最佳方法是什么。看起来微软(在 MFC 库中)同时编写了 Unicode 和 ASCII 类,并使用宏在头文件中执行了类似的操作:
#ifdef _UNICODE
#define CString CStringW
#else
#define CString CStringA
#endif
虽然我不是宏的忠实粉丝,但它确实可以胜任。如果我正在使用 STL 编写库,那么编写包含以下内容的标头是否有意义:
#ifdef _UNICODE
#define GetLastErrorString GetLastErrorStringW
#else
#define GetLastErrorString GetLastErrorStringA
#endif
std::string GetLastErrorStringA();
std::wstring GetLastErrorStringW();
或者我应该只发布单独的库,一个用于 ASCII,一个用于 Unicode?
只是想知道在这种情况下人们认为最好的做法是什么。
更新:解决一些 cmets 和问题:
- 这些将是 C++ 类库。
- 我认为我需要使用 UTF-16 编码,因为我想支持亚洲字符集。
- 我实现 Unicode 的原因有两个:1) 所有新的 SDK 都支持 Unicode,我不相信未来的 SDK 或第三方库将来会支持单独的 ASCII 版本。 2) 虽然我们不会完全国际化我们的应用程序,但如果我们能够处理用户输入(如名称)和从包含亚洲字符的路径加载的文件,那就太好了。
【问题讨论】:
-
您是在开发平面 C 风格的 API 还是一组 C++ 类?
-
您的示例存在问题:如果您希望有机会编译而不是方法本身(尽管您可能必须使用 #在方法的实现中定义)。
-
根据我的经验,您不需要将 UTF-16 用于亚洲 (CJK) 字符。我的程序使用多字节 UTF-8 处理它们,没有任何魔法。
标签: c++ unicode ascii libraries