7

Windows 以外のプラットフォームでは、文字列を簡単に使用char *して UTF-8 として扱うことができます。

問題は、Windows では、wchar* 文字列 (W) を使用してメッセージを受け入れて送信する必要があることです。ANSI 関数 (A) を使用する場合、Unicode はサポートされません。

したがって、真に移植可能なアプリケーションを作成したい場合は、Windows で Unicode としてコンパイルする必要があります。

さて、コードをきれいに保つために、文字列を処理するための推奨される方法、コードの醜さを最小限に抑える方法を確認したいと思います。

必要な文字列の種類: std::string, std::wstring, std::tstring, char *, wchat_t *, TCHAR*( CStringATL 1)。

発生する可能性のある問題:

  • cout/cerr/cinおよびその Unicode バリアントwcout,wcerr,wcin
  • すべてのワイド文字列関数とその TCHAR マクロの名前が変更されましstrcmpた。wcscmp_tcscmp
  • コード内の定数文字列。TCHAR を使用すると、コードに_T()マクロを入力する必要があります。

どのアプローチが最善だと思いますか? (例は大歓迎です)

個人的にはstd::tstringアプローチに行きますが、必要な変換がどのように行われるかを確認したいと思います。

4

3 に答える 3

3

このライブラリを確認することをお勧めします: http://cppcms.sourceforge.net/boost_locale/docs/
役立つかもしれません。今のところブーストの候補ですが、うまくいくと思います。

于 2010-04-27T16:24:46.163 に答える
1

ポータブルコードを書く場合:

1st絶対に使用wchar_tしないでください。移植性も移植性もありません。また、プラットフォーム間でエンコーディングが明確に定義されていません(utf-16 windows / utf-32その他すべて)。

TCharは絶対に使用せず、std::stringUTF-8としてプレーンエンコードされたものを使用してください。

Brain Damaged Win32 APIを扱う場合は、呼び出す前にUTF-8文字列をUTF-16に変換するだけです。

WindowsプロジェクトがメインエンコーディングとしてUTF-8を採用する方法については、 https://stackoverflow.com/questions/1049947/should-utf-16-be-considered-harmfulも参照してください。

于 2010-04-28T15:44:23.097 に答える
1

すべての文字列を UTF-8 でエンコードしたままにし、WIN32 API と対話する前にそれらを UTF-16 に変換するだけです。使いやすい変換関数については、 UTF8-CPPライブラリをご覧ください。

于 2010-04-27T19:01:00.507 に答える