【发布时间】:2010-10-28 02:30:08
【问题描述】:
我正在尝试编写跨平台 i18n C++ 代码。由于大多数 linux 系统更喜欢使用 UTF-8 作为字符编码,我认为我应该在 linux 上使用 string,在 Windows 上使用 wstring。 tchar.h 在 Linux 上可用吗? Linux 上 tchar.h 的等效替代品是什么?
【问题讨论】:
标签: c++ linux internationalization tchar
我正在尝试编写跨平台 i18n C++ 代码。由于大多数 linux 系统更喜欢使用 UTF-8 作为字符编码,我认为我应该在 linux 上使用 string,在 Windows 上使用 wstring。 tchar.h 在 Linux 上可用吗? Linux 上 tchar.h 的等效替代品是什么?
【问题讨论】:
标签: c++ linux internationalization tchar
您可能会发现this 文章很有用。特别是,在接近尾声时,他们讨论了一些关于使用 TCHAR 和处理 Windows 代码的问题。
文章总结为:
使用 GNU C 编译器编译此代码时,TCHAR 将被转换为宽字符数据类型(大多数可移植库在其头文件中定义 TCHAR 并参考 wchar_t)。事实上,这就是我如何将 C++ 程序变成一个字谜生成器的方法:我使用标准 C++ 字符串填充 UTF-8,并使用转换为 wchar_t 的指针将数据提供给库函数。解释为 UTF-32 的 UTF-8 数据等于垃圾(但它对于混淆数据和错误非常有用)。
【讨论】:
为了构建以 Windows 为中心的源代码,我可以使用 Cygwin 的 tchar.h 文件,该文件位于 cygwin\usr\include\w32api 文件夹中。
我实际上是使用 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);
【讨论】: