cout << "привет";またはwcout << L "привет";
wcout<< L"привет";
はそうではない?
cout<< "привет";
がうまく機能する理由(Qt Creator for linux)
cout << "привет";またはwcout << L "привет";
wcout<< L"привет";
はそうではない?
cout<< "привет";
がうまく機能する理由(Qt Creator for linux)
GCCとClangは、ソースファイルをUTF-8として扱います。あなたのLinux端末はおそらくUTF-8にも設定されています。したがってcout<< "привет"
には、UTF-8文字列がUTF-8端末に印刷されています。すべてうまくいきます。
wcout<< L"привет"
は、ワイド文字を端末の文字エンコーディングに変換するために、適切なLocale設定に依存します。変換が機能するには、ロケールを初期化する必要があります(default "classic" aka "C" localeはワイド文字の変換方法がわかりません)。ロケールにはstd::locale::global (std::locale (""))
を、環境設定にはstd::locale::global (std::locale ("en_US.UTF-8"))
を使用して、特定のロケール(similar to this C example)を使用します。 g++ test.cc && ./a.out
(Debianのジェシー・上)この版画 "привет" と
#include <iostream>
#include <locale>
using namespace std;
int main() {
std::locale::global (std::locale ("en_US.UTF-8"));
wcout << L"привет\n";
}
:
は、ここでの作業プログラムの完全なソースです。
this answerも参照してください。ワイド文字を標準出力で使用する危険性については、
理由は、C、C++、POSIX規格に準拠しているためです。ありがとう。 – AProgrammer
ありがとう。それでも "привет"はstdリテラルではなく、 'char []'でなければならないというのは驚くべきことです。 – user2029077
@MinimusHeximus: "привет"は、デフォルトでUTF-8のchar []ですが、L "привет"はUTF-16、UTF-32またはUCS-2のwchar []です。 – ArtemGr
おそらく、出力としてこれらの文字を受け取ったものは「ワイド文字を理解できません」と思われるからです。 「うまくいきません」と言えば、もう少し役立つかもしれません。 –
それは?ターミナルウィンドウではなくしかし、どのように "привет"ユニコードすることができますか? – user2029077
итебе "привет" – vladkras