質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Q&A

解決済

3回答

2736閲覧

chcp を実行すると内部で何が起こるのか?

kakkun61

総合スコア285

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

0グッド

0クリップ

投稿2020/11/01 00:58

編集2020/11/01 01:02

Windows において chcp コマンドを実行すると内部で何が起こるのでしょうか?

「コードページを変える」ということは実行するプログラムに対してどのような影響があるのでしょうか?

internationalization を考慮した場合、プログラムは設定されたコードページをチェックして出力のしかたを変えるべきでしょうか?

上記3点よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2020/11/01 01:02

なにをしたくてchcpの動作を気にしてるんでしょうか。 あるいは、何かをしていてコードページの影響で不具合を起こしたということでしょうか。 それならそっちの方を聞いたほうがいいかと思いますが
kakkun61

2020/11/01 01:04

よく文字化けをすると chcp 65001 で UTF-8 に設定することが多いのですが、これは何をしているのか理解できていないので、理解したいと思っています。 何か不具合が起きたりしているわけではありません。
guest

回答3

0

ベストアンサー

Windows において chcp コマンドを実行すると内部で何が起こるのでしょうか?

SetConsoleCP 関数
SetConsoleOutputCP 関数

これらにより、そのプロセスに関連付けられたコンソール画面の入力および出力設定が変わります。プロセス単位の変更なので、例えば cmd から chcp を呼び出した場合、その cmd とそこから呼び出されるコマンドのコードページは変わりますが、その他のプロセスには影響しません。

「コードページを変える」ということは実行するプログラムに対してどのような影響があるのでしょうか?

そのプログラムがコンソール画面を持っている場合、コンソール画面に標準出力を出力する時、またキーボードからデータを受け取る時、バイトコードをどのコードページで文字列化するかという設定が変わります。

internationalization を考慮した場合、プログラムは設定されたコードページをチェックして出力のしかたを変えるべきでしょうか?

コードページに合わせたデータを出力しないと画面上で文字化けします。ファイルやパイプへの出力はそのデータを読むプログラムが考えることなのでまた違う条件になります。大抵の場合、出力先とそのコードページによってデータを変更するのではなく、コマンドライン引数や設定ファイルなどでユーザーが指定します。

投稿2020/11/01 03:33

編集2020/11/01 03:40
Zuishin

総合スコア28669

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

まず文字を出力するにあたって「画面」と「標準出力」はレイヤが異なる存在で、そこを意識するのがまず第一です。 そしてコンソールそのものの内部はおそらく Unicode で扱われています。

文字列を扱う Windows API のほとんどは ANSI コードページ版と Unicode 版のふたつが提供されています。 コンソールに文字を出力する API で言うなら WriteConsoleAWriteConsoleW です。 WriteConsoleA に文字列を与えるとそれは現在のコードページの設定に従って解釈された上で Unicode に変換して画面に表示します。

つまり、 chcp コマンドは WriteConsoleA (など) が文字をどのように変換するかを切り替えるコマンドだと言えます。 (実際にはフォントの切り替えなどにも影響するようで単純ではないのですが、ここでは文字コードの解釈に限って説明してます。)

標準出力は msvcrt.dll が引き受けて文字コードの変換を含む処理をした後でコンソールに出力することになりますが、標準出力を通した文字列が画面に表示するときには基本的には WriteConsoleA の方を呼出しているはずです。 設定によっては二段階の変換が入ります。

投稿2020/11/01 02:27

SaitoAtsushi

総合スコア5684

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

よく文字化けをすると chcp 65001 で UTF-8 に設定することが多いのですが、これは何をしているのか理解できていないので、理解したいと思っています。

ということであるなら、OS上の文字、文字列の入出力の場合に、それを解釈する文字コード体系を切り替えている、ということになろうかとおもいます

投稿2020/11/01 01:16

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問