cmd や msys の標準入力のエンコーディング
◆ コマンドプロンプトは Shift_JIS
◆ chcp 65001 したあとは日本語入力できない
◆ msys は UTF-8
◆ 両方の環境で使う標準入力受け取るプログラムは大変そう
◆ chcp 65001 したあとは日本語入力できない
◆ msys は UTF-8
◆ 両方の環境で使う標準入力受け取るプログラムは大変そう
これの続きです
気になったので入力も試してみました
まず確認用の PHP コードを用意します
とりあえず入力をのそのまま表示します
[コマンドプロンプト]
次は UTF-8 にします
[コマンドプロンプト]
何も表示されません
それ以前に通常のキーボードから日本語が入力できなくなっていて コピペで入力しました
コマンドプロンプトでは UTF-8 の入力を扱えないみたい
そのまま Shift_JIS で PHP に渡してくれてもいいのですけどね
次はバイナリで表示させてみます
[コマンドプロンプト]
入力はやっぱり Shift_JIS です
[msys]
msys は UTF-8 です
やっぱりですが 入力のエンコーディングが違っています
コマンドプロンプト用に作ったプログラムを msys で起動して入力すると Shift_JIS を期待してるのに UTF-8 で入力されるのでちゃんと動かなそうです
気になったので入力も試してみました
まず確認用の PHP コードを用意します
とりあえず入力をのそのまま表示します
<?php
$stdin = fgets(STDIN);
var_dump($stdin);
$stdin = fgets(STDIN);
var_dump($stdin);
[コマンドプロンプト]
C:\Users\user\Desktop>chcp
現在のコード ページ: 932
C:\Users\user\Desktop>php stdin.php
ファイル
C:\Users\user\Desktop\stdin.php:5:
string(8) "ファイル"
現在のコード ページ: 932
C:\Users\user\Desktop>php stdin.php
ファイル
C:\Users\user\Desktop\stdin.php:5:
string(8) "ファイル"
次は UTF-8 にします
[コマンドプロンプト]
C:\Users\user\Desktop>chcp
Active code page: 65001
C:\Users\user\Desktop>php stdin.php
ファイル
C:\Users\user\Desktop\stdin.php:5:
string(0) ""
Active code page: 65001
C:\Users\user\Desktop>php stdin.php
ファイル
C:\Users\user\Desktop\stdin.php:5:
string(0) ""
何も表示されません
それ以前に通常のキーボードから日本語が入力できなくなっていて コピペで入力しました
コマンドプロンプトでは UTF-8 の入力を扱えないみたい
そのまま Shift_JIS で PHP に渡してくれてもいいのですけどね
次はバイナリで表示させてみます
<?php
$stdin = trim(fgets(STDIN));
var_dump(bin2hex($stdin));
$stdin = trim(fgets(STDIN));
var_dump(bin2hex($stdin));
[コマンドプロンプト]
C:\Users\user\Desktop>chcp
現在のコード ページ: 932
C:\Users\user\Desktop>php byte.php
あ
C:\Users\user\Desktop\byte.php:5:
string(4) "82a0"
現在のコード ページ: 932
C:\Users\user\Desktop>php byte.php
あ
C:\Users\user\Desktop\byte.php:5:
string(4) "82a0"
入力はやっぱり Shift_JIS です
[msys]
$ /c/programs/php-7.0.2-Win32-VC14-x64/php byte.php
あ
C:\Users\user\Desktop\byte.php:5:
string(6) "e38182"
あ
C:\Users\user\Desktop\byte.php:5:
string(6) "e38182"
msys は UTF-8 です
やっぱりですが 入力のエンコーディングが違っています
コマンドプロンプト用に作ったプログラムを msys で起動して入力すると Shift_JIS を期待してるのに UTF-8 で入力されるのでちゃんと動かなそうです