linux上的tchar.h

时间:2009-05-21 23:37:22

标签: c++ linux internationalization tchar

我正在尝试编写跨平台的i18n C ++代码。由于大多数linux系统更喜欢使用UTF-8作为字符编码,我认为我应该在Linux上使用string,在Windows上使用wstring。 Linux上有tchar.h吗?什么是Linux上tchar.h的等效替换?

3 个答案:

答案 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);