库的字符串编码是否符合Unicode或灵活
Should string encoding for library conform to Unicode or flexible?
我用c++创建了一个库,它暴露了C风格的接口api。有些参数是字符串,所以它们是char *
。现在我知道它们应该都是Unicode,但因为它是一个库,我不认为我想强迫用户使用决定或不。理想情况下,我认为最好使用TCHAR
,这样我就可以为unicode代码和ASCII用户构建它。然后我读了这篇文章,它基本上反对这个想法。
作为API的一个例子,字符串是文件名或错误消息,如下所示。
void LoadSomeFile(char * fileName );
const char * GetErrorMsg();
我使用c++和STL。std::string和std::wstring之间也存在争议。就我个人而言,我真的很喜欢MFC的CString类,它很好地处理了所有这些,但这意味着我必须为它的字符串类使用MFC。
现在我认为TCHAR对我来说可能是最好的解决方案,但我是否必须使用CString(内部)才能工作?我可以使用STL字符串吗?据我所知,这里不是string就是wstring。
TCHAR
类型是一个不幸的设计选择,幸运的是我们已经离开了。没有人需要再使用TCHAR
了,谢天谢地。Unicode的选择也已经为我们做好了:Unicode是未来唯一合理的选择。
问题是,你的库只支持windows吗?还是便携的?
-
如果您的库是可移植的,那么典型的选择是
char *
或std::string
与UTF-8编码字符串。有关更多信息,请参阅UTF-8 Everywhere。总的来说,wchar_t
在Windows上是UTF-16,但在其他地方是UTF-32,这使得它对于跨平台编程几乎毫无用处。 -
如果你的库只在Win32上运行,那么你可以自由地使用
wchar_t
代替。在Windows上,wchar_t
是UTF-16
不要同时使用,这会使你的代码和API变得臃肿且难以阅读。TCHAR
是一个支持Win32 API和迁移到Unicode的hack。
- 如何将unicode字符串从C++传递到delphi
- 将 unicode 字符串与 c ++ 符号进行比较?
- C++:Unicode 字符串文字的可移植性
- 如何使用 CTypes 将 wchar_t** - 以空结尾的 UNICODE 字符串数组 - 返回到 Python 脚
- Xamarin Android:在 C++ 中将字符串从 C# 封送到 Unicode 字符串的正确方法是什么?
- 如何在 python 包装中使用 unicode 字符串用于带有 cython 的 c++ 类?
- 如何使用poco :: logger记录Unicode字符串
- 如何将 Unicode 字符串连接成字符串以传递到 mysql 调用中
- Unicode字符串Visual C 构造函数
- 如何将 (ICU4C) Unicode 字符串逐个字符复制到另一个 Unicode 字符串
- 如何从Windows中的进程中读取Unicode字符串
- 如何在Visual C 中的BSTR和32位Unicode字符串之间进行转换
- C 编译器如何从UTF8源文件中生成Unicode字符串文字
- 如何检测终端中的unicode字符串宽度
- 如何在字符级别操作Unicode字符串
- 获取Crypto++中Unicode字符串的SHA1
- 将 unicode 字符串转换为字符串
- c++Unicode字符串与易混淆字符的比较.例如(U 0054)应为==(U03A4)等
- 如何在带L(或不带L)的变量中传递unicode字符串
- C++中的Unicode字符串处理