覚え書きとして。
MacOS10.10.5でmiエディタ(ver 3.0.0b13(227))を使って、保存する文字コードにShift_JISを選択している場合。半角空白文字を入れるときに opt + space を使ってはだめ。保存しようとすると次のダイアログが表示されてしまう。
原因。opt + space で入力される文字は半角空白文字ではない。対策。shift + space を使って入力すること。ちなみにATOKでも同じでした。
.
.
するってーと、opt + space で入力される文字はなにものだい、空白文字ではないのかい? という疑問から調べたらUTF-8における0xc2a0でしてノーブレークスペース(NBSP)というものでした、えー(困惑)。ShiftJISにはそんなコードは無いので、miはUTF-8で保存しようとするというわけで。
なおmiエディタで半角空白文字が入らないときは、モードごとの設定で shift + space のキーバインドを確認してみること。
以下、余談。半年ほど前に偶然に opt + space が原因と気づいて「じゃ、shift + spaceや英数直接入力すればいいじゃないか」と流していたのですが、今回覚え書きとして書くにあたり、それだけだとナニだったので調べることにしました。で、opt + space で書き込まれた値を調べるためにはUTF-8で保存して16進数で内容を表示することを考えましたが、表示するためにはユーティリティーが必要だなぁ探すのもインストールも面倒だなぁ…よし止そう!と最初は思いました。しかしMacならターミナルから「od -h ファイル名」で表示できると気づき、調べた次第。なるほどノーブレークスペースかと勉強になりました。あと、MacOSのファイルはリトルエンディアンなことに改めて気づいたり。
それにしてもUTF-8が憎い。0xc2a0が ノーブレークスペースなのはググってわかったものの、その根拠となるコード一覧みたいなの…ASCIIコード表みたな…がでてこない。とうとうウィキペディア様にお助けいただいて、0xc2a0は定義ではなくて導出だから一覧表として無いのだ、と私は理解しました。こんなかんじ。
「文字集合UnicodeではノーブレークスペースをU+00A0に割り当てており、それをUTF-8の11bitの2バイトで符号化し、値は0xc2a0となる」
UnicodeのNBSP U+00A0 -> 00010 100000 ※ビットパターン UTF-8 11bit 符号化パターン 110 yyyyx 10 xxxxxx UTF-8のNBSP 0xc2a0 -> 110 00010 10 100000
これは面倒だよ。0xc2a0という値から逆引きできないじゃないか…。あとビット長が気持ち悪い…。
こういうのがだんだん億劫になってきました。やばい。