我正在尝试编写跨平台的i18n C ++代码。 由于大多数linux系统都倾向于使用UTF-8作为字符编码,所以我认为我应该在Linux上使用string,在Windows上使用wstring。 是linux上的tchar.h? Linux上tchar.h的等效replace是什么?
你可能会发现这篇文章是有用的。 特别是在接近尾声的时候,他们讨论了一些关于使用TCHAR和处理Windows代码的问题。
文章总结为:
使用GNU C编译器(大多数可移植的库在其头文件中定义TCHAR并引用wchar_t)编译此代码时,TCHAR将被转换为宽字符数据类型。 实际上,这就是我如何将C ++程序转换为字符生成器:我使用了填充了UTF-8的标准C ++字符串,并将指向wchar_t的指针提供给库函数。 被解释为UTF-32的UTF-8数据等于垃圾(但对于混淆数据和错误非常有用)。
其实并不容易。 string.size()会给你的UTF-8字节数,而不是Unicode字符。 平心而论,wstring.size()不会在代理出现的情况下给出字符的个数。 但在实践中,这些不在常用的应用程序中使用。
所以,真正的答案真的取决于你为什么需要Unicode字符串。 它只是一个用户界面的本地化? 你有用户输入吗? 你需要解析这个输入吗?
为了构建我的Windows中心源代码,我可以使用Cygwin的cygwin \ usr \ include \ w32api文件夹中的tchar.h文件。
我实际上正在使用Android NDK构建。 为了我的目的,我做了一个tchar.h的副本并修补它。
//#include <crtdefs.h> #define _CRTIMP //#define _strninc(_pc,_sz) (((_pc)+(_sz))) // _CRTIMP size_t __cdecl __strncnt(const char *_Str,size_t _Cnt);