私はクロスプラットフォームのi18n C++コードを書こうとしています。ほとんどのLinuxシステムは文字エンコーディングとしてUTF-8を使用することを好むので、Windowsではlinuxとwstringの文字列を使うべきだと思っていました。 tchar.hはlinuxで利用できますか? Linux上のtchar.hの同等の置き換えは何ですか?tchar.h on linux
16
A
答えて
11
thisの記事が役立つことがあります。特に、終わり近くに、TCHARを使用してWindowsコードを扱うことについて少し話し合っています。
記事の要約は以下のとおりです。
GNU Cコンパイラ(ほとんどのポータブルライブラリはそのヘッダにTCHARを定義し、wchar_t型を参照)で、このコードをコンパイルするときTCHARがワイド文字データ型に変換されます。これは実際にC++プログラムをアナグラムジェネレータに変換する方法でした。UTF-8で埋め尽くされた標準のC++文字列を使用し、ライブラリ関数にwchar_tにキャストされたポインタでデータを供給しました。 UTF-32として解釈されるUTF-8データはガベージと同じですが、データやバグの難読化には非常に便利です。
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);
関連する問題
- 1. MonoDevelop for Linux on application on
- 2. RubyMine on Linux
- 3. msemaphore on linux?
- 4. libswiftDemangle.so on Linux
- 5. Laravel elixir on linux
- 6. Java + PDFBox on Linux
- 7. arpalert on Linux
- 8. GetTcpTable on Linux
- 9. OpenCV、ffmpeg、eclipse on Linux
- 10. HINTERNET InternetOpenUrl()on linux C
- 11. z3 timeout on linux/mac
- 12. Rails on Linux Mint 11
- 13. Linux Awk help on code
- 14. Ada IO Multiplexing on Linux
- 15. Intellij Idea on OpenSuse Linux
- 16. android-x86 on virtualbox and linux/windows
- 17. win32-api insallation issue on Linux
- 18. Wake On Lan - Linux - .Net Core
- 19. boost :: filesystem :: exists segfault on linux
- 20. asp.net core docker + App Service on Linux
明らかに、tchar.hはWindowsのみです。しかし、あなた自身のtchar.hをロールすることはかなり簡単です。 – Naaff