我正在尝试编写跨平台的i18n C ++代码。由于大多数linux系统更喜欢使用UTF-8作为字符编码,我认为我应该在Linux上使用string,在Windows上使用wstring。 Linux上有tchar.h吗?什么是Linux上tchar.h的等效替换?
答案 0 :(得分:12)
您可能会发现this条有用。特别是,接近结束时,他们讨论了一些关于使用TCHAR和处理Windows代码的问题。
文章摘要是:
使用GNU C编译器编译此代码时,TCHAR将被转换为宽字符数据类型(大多数可移植库在其标头中定义TCHAR并引用wchar_t)。事实上,这就是我将C ++程序转换为anagram生成器的方式:我使用了填充UTF-8的标准C ++字符串,并使用指向wchar_t的指针将数据提供给库函数。解释为UTF-32的UTF-8数据等于垃圾(但它对数据和错误的混淆非常有用)。
答案 1 :(得分:0)
实际上并不那么容易。 string.size()将为您提供UTF-8字节的数量,而不是Unicode字符。平心而论,wstring.size()不会在代理存在的情况下为您提供字符数。但实际上,这些并不适用于常见的应用程序。
因此,真正的答案实际上取决于您需要Unicode字符串的原因。它只是UI的本地化吗?你有用户输入吗?你需要解析那个输入吗?
答案 2 :(得分:0)
要构建以Windows为中心的源代码,我可以使用cygwin \ usr \ include \ w32api文件夹中的Cygwin文件中的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);