web-dev-qa-db-ja.com

Linux上のtchar.h

クロスプラットフォームのi18nC++コードを書き込もうとしています。ほとんどのLinuxシステムは文字エンコードとしてUTF-8を使用することを好むので、Linuxではstringを使用し、Windowsではwstringを使用する必要があると思いました。 tchar.hはLinuxで利用できますか? Linuxでのtchar.hの同等の代替品は何ですか?

18
Sudarshan

this の記事が役立つかもしれません。特に、終わり近くに、TCHARの使用とWindowsコードの処理について少し話し合います。

記事の要約は次のとおりです。

このコードをGNU CコンパイラでコンパイルするとTCHARはワイド文字データ型に変換されます(ほとんどのポータブルライブラリはヘッダーでTCHARを定義し、wchar_tを参照します)。これが実際の方法でした。 C++プログラムをアナグラムジェネレーターに変えました。UTF-8で満たされた標準のC++文字列を使用し、wchar_tにキャストされたポインターを使用してデータをライブラリ関数にフィードしました。UTF-32として解釈されるUTF-8データはガベージと同じです(ただし、非常に便利です)。データとバグの難読化のため)。

12
Paul Sonier

実際、それほど簡単ではありません。 string.size()は、Unicode文字ではなく、UTF-8バイトの数を提供します。公平を期すために、wstring.size()は、サロゲートが存在する場合でも文字数を示しません。しかし実際には、これらは一般的なアプリでは使用されません。

したがって、本当の答えは、Unicode文字列が必要な理由によって異なります。 UIのローカリゼーションだけですか?ユーザー入力はありますか?その入力を解析する必要がありますか?

0
MSalters

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);
0
J.R. Heisey