前置き
自身の環境にてC++でChar型の挙動を確認していたところ、
日本語の文字列は、文字コード「Shift-Jis」で解釈されているようでした。
ふと「エンコーディング方式を別のものにするにはどうすればいいんだろう」
と気になったため、やってみました。
#include <iostream>
#include <windows.h>
using namespace std;
int main() {
SetConsoleOutputCP(65001);
char ch1[] = "あいうえお";
//ch1の中身を16進数で表す。ch1の要素数分ループ
int loop = sizeof(ch1) / sizeof(char);
cout << "char型配列ch1の要素数は[" << loop << "]個" << endl;
for (int i = 0; i < loop; i++)
{
cout << hex << int(unsigned char(ch1[i])) << dec << " ";
}
}
char型配列ch1の要素数は[11]個
82 a0 82 a2 82 a4 82 a6 82 a8 0
《補足》
・[82a0:あ]、[82a2:い]、 のようにshift-jisの文字コードに対応した数値が格納されていることが分かる
・最後の0はChar型特有のNull文字です
目標
Windows11にてVisualStudio2022を使用し、コンソール画面にUTF-8表記の文字コードを表示する
やったこと
1. プロジェクトファイルのエンコーディング方式を変えて保存し直す
1-1. メニューバーの File > SaveFileAs を選択

1-2. Save のプルダウンから [SaveWithEncoding...] を選択

1-3. AdvancedSaveOptions ポップアップの Encoding のプルダウンから Unicode(UTF-8 with signature)を選択し保存

2.エディターの設定ファイルに文字エンコードの設定を追加する
2-1. メニューバーの Tools > Options を選択
2-2. Option の TextEditor > C/C++ > CodeStyle にて [Generate.editorconfig...]ボタンを押す。

2-3. ファイルの選択を促されるので任意の場所を指定する。
新しく作る場合は自分の置きたい場所を選択すればOK。選択したフォルダー直下に「.editorconfig」ファイルが作成されます。
既存の「.editorconfig」ファイルを使用する場合はそのファイルを置いているフォルダーを選択すれば利用可能。
2-4. 「.editorconfig」内に charset = utf-8 と記入。書く行はどこでもOK。

3.プロジェクト設定を変更する
3-1. メニューバーの Project > Properties を選択
3-2. Properties の C/C++ > CommandLine の AdditionalOptionsの欄に /utf-8 と記入。OKを選択して閉じる。

ここまでの作業で目標の「UTF-8表記の文字コードを表示」は達成できたのですが
「cout << "あいうえお";」のように日本語テキストを表示しようとしたら文字化けが発生したので、追加対応を行いました。
4.ソースコードにコンソール設定に関する指示を追記する
Windows.hをインクルードし、SetConsoleOutputCP関数でutf-8用の値を指定する。
#include <iostream>
#include <windows.h> //追加。「SetConsoleOutputCP」呼び出し用
using namespace std;
int main() {
SetConsoleOutputCP(65001); //追加。コードページ(CP)をUTF-8のもの(65001)に指定
char ch1[] = "あいうえお";
//ch1の中身を16進数で表す。ch1の要素数分ループ
int loop = sizeof(ch1) / sizeof(char);
cout << "char型配列ch1の要素数は[" << loop << "]個" << endl;
for (int i = 0; i < loop; i++)
{
cout << hex << int(unsigned char(ch1[i])) << dec << " ";
}
}
結果
上記の設定を全て行うことで、文字コードのエンコード方式が変わった
出力結果もUTF-8相当のものに変化した。
char型配列ch1の要素数は[16]個
e3 81 82 e3 81 84 e3 81 86 e3 81 88 e3 81 8a 0
《補足》
・[e38182:あ]、[e38184:い]、 のようにutf-8の文字コードに対応した数値が格納されていることが分かる
・使用文字コードの変化に伴い、一文字あたり必要なchar型配列の要素数も増え、結果としてchar型配列の総要素数も増えている。