2009-05-21 12 views
16

私はクロスプラットフォームのi18n C++コードを書こうとしています。ほとんどのLinuxシステムは文字エンコーディングとしてUTF-8を使用することを好むので、Windowsではlinuxとwstringの文字列を使うべきだと思っていました。 tchar.hはlinuxで利用できますか? Linux上のtchar.hの同等の置き換えは何ですか?tchar.h on linux

答えて

11

thisの記事が役立つことがあります。特に、終わり近くに、TCHARを使用してWindowsコードを扱うことについて少し話し合っています。

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

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

+4

明らかに、tchar.hはWindowsのみです。しかし、あなた自身のtchar.hをロールすることはかなり簡単です。 – Naaff

0

実際はそれほど簡単ではありません。 string.size()はUnicode文字ではなく、UTF-8バイト数を返します。全ての公平さにおいて、wstring.size()は代理の存在下で文字の数を与えません。しかし実際には、それらは共通のアプリでは使用されません。

実際の答えは、なぜUnicode文字列が必要なのかによって決まります。 UIのローカライズですか?ユーザーの入力はありますか?あなたはその入力を解析する必要がありますか?

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