0

私がやりたいことはすべて、1行のテキストを出力することだけです:

 #include <iostream>
 #include <string>

 int main(void)
 {
   std::wstring    d=L"string_contains_many_languages_German_Mädchenß_Russian_этотязык_and_ブリザンメント";
   std::wcout<<d<<"\n";

   return 0;
 }

ロケールについて聞きました。しかし、多言語ユーザーがいる場合はどうなりますか? そのため、1 つのロケールだけに固執することはできません。

g++ コンパイラを使用する Linux/Ubuntu でも、Windows XP でも正しく動作しません。

おそらく、C++だけでなく、この情報を表示する端末と環境に何らかの形で依存しているのではないかと思います。Linux では、コマンド touch "ブリザアエ" (チルダ ターミナル) を使用して、名前の付いたファイルを作成できます。

少なくとも、C ++を使用して(コードで)dのような文字列にある名前のファイルを作成できるかどうか疑問に思います

修正:

また、WindowsとLinuxでこれらの操作を行いたい

4

2 に答える 2

1

原則として、Windows 以外のプラットフォームでは wchar_t は無意味です。Linux では、これで問題なく動作します。

#include <iostream>
#include <string>

int main(void)
{
  std::string d = "Mädchenß_этотязык_ブリザンメント";
  std::cout << d << "\n";  
}

どこかで UTF-8 エンコーディング以外のものを使用する古い構成を使用していない限り。

Windows では、いくつかの理由で状況が難しくなりますが、1 つの方法を次に示します。

#include <iostream>
#include <string>
#include <io.h>
#include <fcntl.h>

int main(void)
{
  _setmode(_fileno(stdout), _O_U16TEXT);
  std::wstring d = L"Mädchenß_этотязык_ブリザンメント";
  std::wcout << d << "\n";  
}
于 2012-09-13T21:33:32.670 に答える
0

Windows では、これをリテラルとして記述し、ファイルを UTF-8 で保存して (ほとんどのソース コード ファイルが既に保存されているため)、出力の直前に nowide の widen(string) を実行できるはずです。それが動作します。

UTF-16 でリテラルを内部に含むソース コードを保存したくありません。もう 1 つの方法は、文字列をリテラルに格納するのではなく、IDE のボタンをクリックしても変更されない、明確に定義されたエンコーディングを使用して別の場所に格納することです。

于 2012-09-13T21:28:19.740 に答える