Developer's Blog

お手軽!制御文字直接入力

Picky-Picsのロゴ画像(PNG)の先頭128bytesダンプ

こんにちは。Picky-Pics 開発担当の本岡と申します。昨日は勤労感謝の日ということで祝日でしたけれども、制御文字をキーボードから直接入力することにより業務を最大限に効率化している私は、カレンダー通りにお休みを頂くことができました。

さて、本格的なバイナリデータを作る際にはバイナリエディタを使ったり、対象となるフォーマットの専用のエディタを使うのですが、テストデータを作成するときや、PDF ファイルをテキストエディタで編集するときなど、「ちょっと 1 byte だけ制御文字を打ち込みたいんだけども、バイナリエディタを立ち上げるのが面倒臭い!」そう感じたことのある方は多いのではないか思います。この記事では、その願いを叶えるための手段を紹介致します。macOS を例に出しますが、他の OS でもきっと似たような機能があるでしょう。

はじめに:注意事項

ここで紹介する手法は環境(OS、キーボード、アプリケーションソフトウェア等)によっては利用できないことがあったり、意図しない効果を発生させたり、設定されているキーボードショートカットを発動させることによって危険な動作をすることも考えられます。消えては困るデータが存在しない、かつ、停止しても問題の無い環境において、ご自身の責任でご利用下さい。ブログ記事全般に言えることではありますが、ここで紹介している内容を実行して何らかの損害が発生したとしても、フェンリルおよび著者は、一切責任を負いません。

Mac で制御文字を入力する

例えば、コントロールキー(以下 Ctrl)+Q を打ち、続けて Ctrl+J を打つと、改行文字(0x0A LF : Line Feed)を入力することができます。このように、Ctrl+Q に続いて Ctrl+{何か} を打つことで制御文字を入力することが可能です。

この「何か」のところで何を打てばどの制御文字が入るかと言うと、キーボード上の文字の大文字の ASCII コード(J なら 0x4A)から、0x40 だけ減算されたものが入ります。例えばアットマーク「@」(0x40)なら、ヌル文字(0x00)になりますし、左の大カッコ「[」(0x5B)ならエスケープ(0x1B)になります(後者は、どこかで見たことのある組み合わせですね!)。

なお、バックスラッシュあるいは日本円記号「\」(0x5C:ご覧の環境によって文字は変わります)に関しては、Ctrl+Q – Ctrl+\ としてもパイプ「|」(0x7C)が入力されてしまい、この方法では ファイル分離標識(FS : 0x1C)を入力することができません。

Mac で任意の Unicode 文字を入力する

システム環境設定 > キーボード > 入力ソース > 左下の「+」 > その他 で「Unicode 16進数入力」を追加することができます(英語版では Unicode Hex Input)。追加すると、メニューバーにある入力ソース選択メニューや Command+Space で表示される選択画面に Unicode 16進数入力 が登場しますので、これを入力ソースとしてこれを選択した上で Option キーを押しながら4桁の16進数を入力して下さい。すると、目的の文字を入力することが可能です。この方法を使うと、制御文字も入力することが可能です。
macOS Sierra のキーボード環境設定より

また、小ネタとして、システム環境設定にて Unicode 16進数入力 のところでは、キーボードショートカットの設定をすることができます。これを有効にしておくと、キーボードから Right-to-Left(アラビア語など右から左に書く言語が始まることを意味する制御文字)を手軽に入力することも可能になります。これはもう、手放すことができませんね!

ちなみに、UTF-16 で言うところのサロゲートペアのもの(U+{5桁の16進数})は、UTF-16 ビッグエンディアンで 4bytes 分入力することによって入力可能です。

参考情報:検証に使用した環境

  • マシン
    • Mac mini / macOS Sierra 10.12.1 / HHKB Lite 2
    • MacBook Air / macOS Sierra 10.12.1 / 内蔵 JIS キーボード
  • アプリケーション
    • OS 付属の「メモ」
    • CotEditor : 再び小ネタですが、CotEditor の編集メニューには「文字を Unicode 16 進数で入力…」というメニュー項目があり、この機能を使うとシステム環境設定を変更せずに入力できますし、サロゲートペアのものも「U+{5桁の16進数}」の方式で入力可能です。

さいごに

この記事では、フェンリル社内の技術相談チャットにて私が相談を持ちかけた結果、同僚各位から寄せられた情報のうち、実用性が高そうなものを紹介しました。フェンリル社内では一般的なアプリ開発のものだけでなく、今回のようなマイナーな情報も活発に交換されています。こういった情報を交わしながら開発したい方も read-only な方も、腕に覚えのある皆さん、フェンリルでエンジニアとして活躍してみませんか? 詳しくはフェンリルの採用ページへ!

フェンリルのオフィシャル Twitter アカウントでは、フェンリルプロダクトの最新情報などをつぶやいています。よろしければフォローしてください!

フェンリル採用チームの Twitter アカウントです。応募前のお問い合わせや、ちょっとした相談ごとなどお気軽にどうぞ!

Copyright © 2019 Fenrir Inc. All rights reserved.