1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VisualStudio C++プログラム 文字エンコードを utf-8に変更する

1
Last updated at Posted at 2026-02-02

前置き

自身の環境にてC++でChar型の挙動を確認していたところ、
日本語の文字列は、文字コード「Shift-Jis」で解釈されているようでした。

ふと「エンコーディング方式を別のものにするにはどうすればいいんだろう」
と気になったため、やってみました。

Code1
#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 << " ";
	}

}
Code1 Output
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 を選択
image.png

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

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

2.エディターの設定ファイルに文字エンコードの設定を追加する

2-1. メニューバーの Tools > Options を選択

2-2. Option の TextEditor > C/C++ > CodeStyle にて [Generate.editorconfig...]ボタンを押す。
image.png

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

2-4. 「.editorconfig」内に charset = utf-8 と記入。書く行はどこでもOK。
image.png

3.プロジェクト設定を変更する

3-1. メニューバーの Project > Properties を選択

3-2. Properties の C/C++ > CommandLine の AdditionalOptionsの欄に /utf-8 と記入。OKを選択して閉じる。
image.png


ここまでの作業で目標の「UTF-8表記の文字コードを表示」は達成できたのですが
「cout << "あいうえお";」のように日本語テキストを表示しようとしたら文字化けが発生したので、追加対応を行いました。


4.ソースコードにコンソール設定に関する指示を追記する

Windows.hをインクルードし、SetConsoleOutputCP関数でutf-8用の値を指定する。

Code1 Remake
#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相当のものに変化した。

Code1 Output-After
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型配列の総要素数も増えている。

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?