引き続き Tera Term にログインした後の操作について書いていきます。
Tera Term で、対象のコンピュータにログインしたら、文字を入力する必要があります。
それはコマンドだったり、問い合わせの内容だったりするかもしれません。
Tera Term でログインした対象が Linux だった場合は、ほとんどがコマンド入力になります。
コマンドプロンプト(入力受付状態を示す文字)が表示されているところへ、たとえば echo 'helo world!' と入力して Enter キーを押すと、画面では hello world! を表示してくれます。
$ echo 'hello world!'
hello world!
文字コードとは、読んで字のごとく文字に割り当てられているコードのことです。
0 と 1 の世界のコンピュータでは、文字を文字として認識するわけではなく、コード体系に則って扱われます。
たとえば50音表を、上から順番に ABCDE で割り振り、あ行を 1、か行を 2 列目と定義したとします。
A1 なら あ を表示し、
B2 なら き を表示する。
A2B1 という例コードで記述したテキストファイルを保存した場合、対応したテキストエディタでは いか と表示されるようになります。
1文字を表すためのハンコをイメージすると、テキストファイルの実態が思い浮かぶかもしれません。
こんな個人的にコード表を作らなくても、世の中は共通で使われる文字コードがあります。
もともとは、アメリカが ASCII コード (American Standard Code for Information Interchange) として標準化したものです。
アメリカで使う文字は a~z の26文字、A~Z の26文字、算術演算子等を含む記号で、100個も表現できれば問題ありませんでした。
なので 100 個のデータをきちんと識別するためには 2^7=128 という計算で 2 進数で 7 桁あれば足ります。
この 7 bit で 1 byte として利用されました。
(なので ASCII は 7 bit で 1 byte という文字コード)
この文字数は、西欧諸国の文字セットによる利用で不足するため、2^8=256 で 8 bit の文字コードが利用されました。
日本でも、半角カナを含めた 8 bit の文字コードが定義されています。
現在 8 bit = 1 byte というのは世界標準ですが、1 byte = 8 bit ではないことに注意が必要でしょう。
それでも、まともな日本語で扱いたいとき、常用漢字表でも 1945 字あるので圧倒的に桁数が不足しています。
なので日本語は 1 byte の倍である 2 byte (16bit) を使った文字コードを利用しはじめました。
2019年現在の主流は、UTF-8 と呼ばれる文字コードです。
正確には文字コードではなく、文字コードを扱うための符号化方式ですが、ここでは Tera Term で利用するための文字コードとして扱います。
なので UTF-16 等も説明しません。
利用する文字のバイト数も指定するので、普段利用しない文字コード分の桁数が抑えられるのが特徴でしょう。
1文字で x バイトという表現ができません。
Linux や Windows で、文字コード変換をしなくとも、標準で相互に利用できます。
Extended Unix Code という名前の略称のとおり、長く日本語環境の UNIX で利用されてきた文字コードです。
Windows で利用するためには、SJIS 等に変換する必要があります。
ASCII をもとに日本で標準化された文字コードです。
2 byte であることが特徴です。
EUC にも利用されています。
Shift_JIS
Microsoft が開発したと聞いています。
全角カナや半角カナを識別することのできるコードで、便利なためこれも長い間利用されていました。
現在でも一部では利用されています。
これも、文字によってはビットの長さを変えられるため、1文字 x バイトという表現ができません。
改行コードは、0 と 1 の連続である文字コードの列(文字列)にとって、見た目に必要な要素です。
また、UNIX ではコマンド実行の確定も意味しています。
UNIX では LF (Line Feed)
MachOS では CR (Carriage Return)
Windows では CR + LF
Line Feed は改行 という意味で、次の行に改めることを差します。
コードとして定義する時代にモデルとなったタイプライターは、改行したあと手で頭の位置まで戻していたようです。
VIDEO
これに対して、Carriage Return が意味するところは復帰 。
行頭まで自動で戻してくれる機能のようです。
Tera Term は、Windows 用ソフトウェアなので、CR + LF を利用します。
行頭まで戻したうえで改行したら?
それが Windows の仕様です。
Tera Term を通したアクセスの場合は、アクセス先とやりとりする改行コードを自動的に変換してくれます。
ファイルで直接アクセス先の操作をする場合、改行コードの変換を考慮する必要があります。
CR の文字コードは、エスケープ込みで \r
LF の文字コードは、エスケープ込みで \n
UNIX にテキストファイルを持って行った際、文字コードの除去を忘れたら正規表現を使って \r を消すと楽になるでしょう。
vi で利用可能な正規表現であれば編集モードで
:%s/\r//g
と入力することで、ファイル内のすべての \r (CR) が削除 (正確には \r を '' (Null) に置換) されます。
もっと気を付けるべきは、UTF-8 の仕様にある BOM コードの有無でしょうね。
シェルスクリプトの場合は、テキストファイルなのかバイナリファイルなのか、判別に失敗することがありますので。
もちろん Tera Term マクロで利用する改行コードは CR + LF です。