疑問はここにあります。私はビットマップをcat編集してファイルの各バイトに1つのASCII文字を表示したいと思いました。したがって、最初の数文字は予想どおり(BM6)ですが、端末には「strip」、「Ѿ」、「」などの非ASCII文字も表示されることがわかりました。
なぜこれですか?猫はここで何をしているのでしょうか?
(私が使っているビットマップはbitPerPixel = 8なので、マルチバイトピクセルを表現できませんか?)
答え1
標準出力に書き込みます。
次の作業は標準出力によって異なります。端末装置の場合、動作は端末によって決定され、以下とは関係ありませんcat
。
端末の動作に関していくつかの重要なことがあります。
- ASCIIは7ビット文字エンコーディングです。 8ビットバイトはASCII文字セットの2倍を表すことができます。その他128個の値の意味は主題となりましたたくさん1970年代、1980年代、1990年代を行き来する。シングルバイトエンコーディング、ダブルバイトエンコーディング、コードページ、ISO 8859、およびASCII自体のバリエーション部分があります(または標準の後続バージョンで変更されました)。これはISO 2022 / ECMA-35と切り替え可能な文字セットの複雑さをカバーしません。
「純粋なASCII」世界があるという神話があります。ほぼ半世紀の間、これは本当ではありませんでした。最近では、実際のASCIIだけを見る状況はほとんど発生しません。
- 最近はターミナルエミュレータ各コードポイントが1バイト以上のUnicodeの可変長エンコードであるUTF-8を使用する可能性が高いです。 15年前から一般化し始めました。
- でもASCIIのみを使用しており、一部の文字は次のとおりです。印刷文字がある場合、端末は印刷可能なグラフィックをレンダリングし、他の文字はコントロール印刷されないさまざまな効果を持つ文字(␀の場合はまったく効果がない場合を含む)Unicodeはより複雑ですが、特定のコードポイントのみを実際に表示できるという基本的なアイデアはまだほぼ正確です。
- 端末は、受信したバイトストリームを文字エンコーディングに従って文字としてデコードします。現在使用する準備が整いました。。各端末の状況は非常に多様です。端末エミュレータ一般に、ユーザーが望むようにデコードを変更できるいくつかのメニューオプションがあります。
いっぱいにして端末に印刷してビットマップを見るのはcat
クレイジーです。学びの楽しみhexdump
、またはod
。 全くcat
関与してはいけない。