4

私は argv を wchar_t** (以下を参照) として取得します。これは、Unicode を扱う必要があるためですが、それを char ** に変換する必要があります。どうやってやるの?

int wmain(int argc, wchar_t** argv) 
{ 
4

3 に答える 3

4

これを行う方法は複数あります。環境と利用可能なコンパイラ/標準ライブラリ/その他のライブラリに応じて、少なくとも 3 つの選択肢があります。

  1. std::locale および std::codecvt<> ファセットを使用します。
  2. std::mbstowcs(); のような C ロケール関数を使用します。
  3. *nix の iconv() や Windows の WideCharToMultiByte() などのサードパーティ関数を使用します。

本当に変換する必要がありますか?

多くの場合 (特に Windows では)、wchar_t 文字列から char 文字列への変換は損失を伴う変換であることに注意してください。システムが char 文字列に使用する文字セットは、多くの場合 UTF-8 ではありません。たとえば、国別文字または一部のアジア言語を含むファイル名を char 文字列に変換すると、元のファイルにアクセスするのに実際には使用できないものになる可能性が高くなります。

于 2010-07-12T11:08:55.783 に答える
1

これはトリックを行います:

#define MAXLEN 512
   char tx[MAXLEN];
   mbstowcs(argv[i], tx, MAXLEN);
于 2010-07-12T09:55:25.217 に答える
0

なぜ変換する必要があるのですか?ほとんどの場合、プロジェクト設定を変更する必要があるため、すべてがワイド文字を受け入れます。サード パーティのライブラリで非 Unicode 文字列が必要な場合は、Unicode 用の適切なオプションを使用して再コンパイルする必要があります。Unicode 用の適切なオプションがない場合は、このライブラリを削除して、より良いライブラリを見つけます (作成します)。

于 2010-07-14T09:03:00.750 に答える