C++でUnicodeの文字を表示するには?
質問
ロシア語の"ф"を印刷しようとしています( U+0444 CYRILLIC SMALL LETTER EF) の文字を印字しようとしているのですが、これは10進数のコードで 1092 . C++を使って、この文字をプリントアウトするにはどうしたらよいでしょうか?私は次のようなものがうまくいくと思ったのですが、まだ...。
int main (){
wchar_t f = '1060';
cout << f << endl;
}
どのように解決するのですか?
文字を表現するには、Universal Character Names (UCN)を使用することができます。文字'ф'はUnicode値U+0444なので、C++では' \u0444' または ' \U00000444' と記述することができます。また、ソースコードのエンコーディングがこの文字をサポートしている場合は、ソースコードにそのまま記述することができます。
// both of these assume that the character can be represented with
// a single char in the execution encoding
char b = '\u0444';
char a = 'ф'; // this line additionally assumes that the source character encoding supports this character
このような文字をプリントアウトすることは、何をプリントアウトするかによります。もしあなたがUnixのターミナルエミュレータにプリントしていて、ターミナルエミュレータがこの文字をサポートするエンコーディングを使用していて、そのエンコーディングがコンパイラの実行エンコーディングと一致するならば、次のようにすることができます。
#include <iostream>
int main() {
std::cout << "Hello, ф or \u0444!\n";
}
このプログラム ではありません。 は 'ф' が一文字で表現できることを必要としません。OS X や最近の Linux では、ソース、実行、コンソールのエンコーディングがすべて UTF-8 (すべての Unicode 文字をサポート) であるため、これは問題なく動作します。
Windows では物事が難しく、異なるトレードオフで異なる可能性があります。
移植可能なコードを必要としない場合 (他のすべてのプラットフォームで本当に避けるべき wchar_t を使用することになります)、おそらく最も良い方法は、出力ファイル ハンドルのモードを UTF-16 データのみを受け取るように設定することです。
#include <iostream>
#include <io.h>
#include <fcntl.h>
int main() {
_setmode(_fileno(stdout), _O_U16TEXT);
std::wcout << L"Hello, \u0444!\n";
}
ポータブルなコードはより困難です。
関連
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み】Enterキーを押して続行する
-
[解決済み】エラー。引数リストに一致するコンストラクタのインスタンスがない
-
[解決済み] UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 20: ordinal not in range(128)
-
[解決済み] 文字列リテラルの前にある'b'文字は何を意味するのでしょうか?
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] Linux上で動作するC++コードのプロファイリングを行うにはどうすればよいですか?
-
[解決済み] 特定のUnicode文字を含むコメントでのJavaコードの実行が許可されているのはなぜですか?
-
[解決済み] cout を使って double 値を完全な精度で表示するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み] クラスにデフォルトコンストラクタが存在しない。
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み】C++の余分な資格エラー
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み】cmd.exeが使用しているエンコーディング/コードページは何ですか?
-
[解決済み] C++11での文字列リテラルのUnicodeエンコーディング