全国の PC88 ファンの皆様、こんにちは! (こんにちは!) #違う
通信テキストとかを触っていると、制御文字とかを扱うケースがあります。
ところが制御文字は「目には見えない文字」なので、Poweshell や メモ帳 で見ようとしても、見えないかよくわからない文字で表示されるかどちらかです。たとえば Powershell の場合、以下のように表示されたりします。
その点、PC88 系であれば制御文字を表示できて、かつ、その表示がどの制御コードを指しているのかが分かりやすかったわけです…(ぇ
しかし Unicode な世界な今、制御コード文字は U+2400 あたりに登録されています。
たとえば IME パッドを使用して確認する場合、左側ペインの「制御機能用記号」を選択すると、U+2400 に飛んでくれます。しかし表示フォントが MS ゴシックになっていると文字が表示されません。これは MS ゴシックに制御機能用記号のグリフが割り当てられていないためです。このため、制御機能用記号の文字を可視化したい場合は Arial Unicode MS など、グリフのあるフォントを選択します。
制御文字をこの「制御機能用記号」に置き換えてやれば、Excel でも制御文字を表示できるようになります。
ちなみに、以下は "Migu 1M" フォントで表示した結果です。(等幅で表示したかったので)
置換用の VBA 関数は以下。 =VisualizeControlCharacter("文字列") といった感じで使用します。
Function VisualizeControlCharacter(s As String)
For i = 0 To &H20
s = Replace(s, Chr(i), ChrW(&H2400 + i))
Next
s = Replace(s, Chr(&H7F), ChrW(&H2421))
VisualizeControlCharacter = s
End Function
ついでに Powershell の場合の関数も作ってみました。
(上記 Excel VBA のコードとはアプローチを変えて作っています。また、空白文字を "SP" ではなく "␣" にしています。)
function VisualizeControlCharacter($s) {
-join (
$s.ToCharArray() |
% {
switch -regex ($_){
'[u0000-u001F]' { [Char]([Int16]$_ + 0x2400) };
'[u0020]' { [Char](0x2423) };
'[u007F]' { [Char](0x2421) };
default { $_ };
}
}
)
}
ただし、Powershell の Console だと非 CP932 の文字は化けてしまうので、ISE の Console ペインで実行します。
