2017-07-30 34 views
4

ASCII文字コード0x07はビープ音です。コンソールビープ文字コード - 番号が間違っていますか?

CMDを開くとALTをクリック + 利回り:

enter image description here

そして、私はクリック ENTER - 私はビープ音を聞きます。これは問題ありません。

バッチファイルの最後にビープ音を追加する方法を検索しましたが、これが解決策であることが判明しました。(編集後にSOには表示されないためイメージとして貼り付けています):

enter image description here

これは仕事をして、音を出すん。 ECHO上(を超えてを比較して)HEXビューアで調べたところ、丸い弾丸は次のとおりです。

enter image description here

しかし、私は手動で文書にALT + を追加した場合、私はこれを参照してください。そして、それはビープ音ではありません - 六角として95で

enter image description here

。また、私が働いてバッチファイルに行って、私のALT + を使用して新しい行を追加しました:

enter image description here

しかし、HEXビューアーを経由して探して:

enter image description here

質問:

私は少し混乱しています。 Alt + 65をクリックすると、どこでもAが得られます。

Windows GUIに保存したときにビープ音が違って機能しないのはなぜですか?コンソールで

私はALT+007をクリックした場合、私は(それがビープ音をする)^Gを得るが、私はALT+7をクリックしたときに、私はビープ音ではない円を、得る:ここで

は両方とも:

enter image description hereメモ帳を経由して

もう一つの興味深い観察++:

enter image description here

私はそれがエンコードなどに関連していると思いますが、私は矛盾を理解していません。

+0

ANSIエンコーディングを使用していますか?バッチが完全に認識できるのはこれだけです。 – SomethingDark

答えて

0

私は示唆するための回避策があります。スクリプトでこれを入れて:

forfiles /p "%~dp0" /m "%~nx0" /c "cmd /c echo 0x07" 

スクリプトのファイル名(例えば1時間)に一致するスクリプトのディレクトリ内のすべてのファイルについて、それがASCII文字7をエコーし​​、ノイズを行います。 forfiles /?ドキュメントから:

は、コマンドラインでの特殊文字を含めるには0xHH形式の文字(タブのEX 0x09の。)のための16進コードを使用します。内部CMD.exeコマンドの前には "cmd/c"を付ける必要があります。

forfilesは、印刷不可能な文字や拡張文字が必要な場合はいつでも悪用する便利なユーティリティです。私の憶測については


予想通りAltキー + が動作しない理由を、私は、コンソールは、ウィンドウアプリケーション(コンソール= 437、異なるコードページで動作します信じているためen-US、IIRCの場合はウィンドウイング= 1252)。私はこの問題もfor reasonsと闘ってきました。最終的には、そのJavaScriptプロジェクトのコンソールキャラクタ1〜31に使用されているシンボルをハードコードすることに頼っていました。

+0

コンソールは、入力と出力の両方でOEMコードページを最初に使用し、CMDは現在の出力コードページを使用して行ごとにバッチスクリプトをデコードします。 OEMの代わりにANSIとしてスクリプトを保存した場合は、chcp.com(例: 'chcp 1252')を使用して、バッチスクリプト自体のANSIコードページに変更できます。しかし、これはコード1〜31の古典的なDOSグリフを使用しません。 CMDは、OEMコードページの拡張ASCIIバージョン、したがってASCII制御コード(例えば、箇条書きグリフの代わりに^ G BEL文字)を使用する「MultiByteToWideChar」によってデコードする。 – eryksun

1

これは実際の回答ではありませんが、コメントには大きすぎます。

"手動でALT + 7をドキュメントに追加する"の部分では、生成すべきではない奇妙な結果が生成されました。結果は単一の0x07文字であったはずです。 Alt + 7を押したときにあなたのエディタが面白いことをした可能性があります。

このようなトラブルシューティングの問題は、使用しているツールが複雑な動作をして実験を歪ませることです。ツールはまた、奇妙なモードと奇妙な状態を持っています。たとえば、コンソールサブシステムのエンコードは何ですか?

私はこれを試してみました:copy con x.batAlt+7続いechoを入力してからCtrl+Zとビープバッチファイルを得ました。キャラクターは弾丸のように見えました。
その後、私はAlt+007で試しましたが、私もビープ音のバッチファイルがありましたが、文字は^Gになりました。 C:\>プロンプトで

は、私がAlt+7続いechoを入力、弾丸も生産されたが、何もビープ音がありませんでした。しかし^Gのように見えるAlt+007は、ビープ音を鳴らしました。 Go figure。

制御文字を入力しようとしたときに発生する不一致を無視するとします。これは、制御には多くのソフトウェアが含まれており、不思議なやり方で動作するようです。 (私は知っている、答えではない)

+0

Windows Alt + 7は、コードページ437(米国英語)または856(ヘブライ語)など、システムロケールのOEM文字です。メモ帳などのウィンドウに入力すると、U + 2022(箇条書き)などのUnicode文字としてアプリに送信されます。次に、それをシステムのANSIコードページとして保存すると、コードページ1252のバイト0x95としてエンコードされます(米国の英語)または1255(ヘブライ語)。次に、バッチファイルから読み取ると、コードページ437では "ò"、コードページ856では "ץ"であるOEMコードページ(chcp.comで変更されていない場合)を使用してCMDがデコードします。 – eryksun

+0

Windowsのキーパッドで数字が0の場合、WindowsはOEMコードページの代わりにANSIコードページを使用します。この場合、Alt + 007を入力すると、ASCII BEL文字が入力されます。 ANSIファイルとして保存すると、単純に0x07バイトになります。これをデフォルトのOEMコードページ(例えば437)としてデコードする場合、CMDは制御文字0-31と127を* ASCII *制御コードにマップし、古典的なMS-DOSではなく* MultiByteToWideCharを使用することに注意することが重要ですAlt + 7を入力したときに表示されるOEMシンボルなど。 – eryksun

+0

@eryksunあなたはあなたのことを知っているようです。私はあなたが答えを投稿すべきだと思います。 –

関連する問題