ヌル文字とは
ヌル文字(null character)とは、値が0である
制御文字のことです。しばしば「NUL」と表記されることもあります。
英語の発音から「ナル文字」と呼ばれることもありますが、本稿では「ヌル文字」で統一します。
多くの文字コード体系においてヌル文字は定義されており、
ASCII、
Unicode、
EBCDICなどがその例です。これらの文字コードでは、ヌル文字はコードポイント0に割り当てられています。ただし、
JIS X 0208のように、ヌル文字を含まない文字コード体系も存在します。
プログラミング言語では、ヌル文字は広く利用されています。特に
C言語では、ヌル文字のコードが0であると明確に定義されています。
日本語では、ヌル文字を「空文字」と訳すこともあります。
ヌル文字の用途
歴史的背景
ヌル文字は、もともとNOP(No Operation)と同様の、何もしないという意味で利用されていました。初期のコンピュータシステムでは、
プリンターや
端末にヌル文字を送っても何も起こらないのが普通でした(ただし、
スペースとして表示するターミナルもありましたが、これは本来の挙動ではありません)。
テレタイプ端末をコンピュータの出力装置として使用していた時代には、各行の末尾にヌル文字を挿入することで、機械的な印字機構が次の行の先頭に移動するまでの時間を稼いでいました。
紙テープにおいては、ヌル文字は穴のない行として表現されます。そのため、新品の
紙テープはすべてヌル文字で埋められていると考えることができます。この性質を利用して、穴のない行に新たに文字をパンチすることで、ヌル文字で埋められた場所に文字を「挿入」することができました。
ヌル文字は、
文字列の終端を示す文字として、
C言語とその派生言語である
C++、および多くのデータ形式で重要な役割を果たします。通常、
文字列は文字の
配列として表現されますが、
C言語では
文字列の末尾にヌル文字を置くことで、
文字列の終わりを識別します。このような形式の
文字列を「ヌル終端
文字列」と呼び、特に1バイト単位でエンコードされている場合は「ヌル終端バイト
文字列」と呼びます。
GNUのfindやxargsといったコマンドでは、複数のファイル名をヌル文字で区切ることで、ファイル名に空白文字が含まれている場合でも正しく処理することができます。
注意点
ヌル文字は特殊な文字であるため、正しく処理できないシステムも存在します。たとえば、
Cascading Style Sheets(CSS)2.1では、スタイルシートにヌル文字が含まれる場合の動作は未定義とされています。また、通常の
テキストファイル(
プレーンテキスト)形式では、ヌル文字が含まれることはありません。
Javaや
.NETなどのモダンな
プログラミング言語では、
文字列を扱う際に、文字
配列だけでなく
文字列の長さ情報も併せ持つデータ構造を使用するため、ヌル文字は終端を表す役割を持ちません。これにより、
文字列の途中にヌル文字を含めることも可能です。
ヌル文字の表記方法
ソースコードでは、ヌル文字を `\0` のような
エスケープシーケンスで表記することが一般的です。しかし、`\0` はヌル文字専用の
エスケープシーケンスではなく、単に8進数で文字を表現しているに過ぎないため、注意が必要です。`\0` の後に0から7の数字を続けると、8進数2桁の文字として解釈されてしまいます。
`\0` 以外にも、`\000` や `\x00` といった表記を使用する
プログラミング言語もあります。
Unicodeでは、 `\u0000` や `\z` がヌル文字を表す表現として使われます。URL中では、ヌル文字は `%00` で置き換えられますが、これはヌルバイトインジェクションと呼ばれる攻撃を防ぐための対策です。
キャレット記法では、ヌル文字は `^@` で表されます。US
配列キーボードでは、Ctrlキーを押しながら@を入力するとヌル文字を入力できます。また、Ctrl+2やCtrl+spaceで入力できる場合もあります。
文書中では、ヌル文字を1em幅の"NUL"と書かれたシンボルで表現することがあります。
Unicodeには、これに対応するグリフとして "symbol for null"(U+2400, ␀)が存在しますが、これはあくまでも "NUL" を表現するためのものであり、実際のヌル文字(U+0000)とは異なるため注意が必要です。
符号位置
ヌル文字の符号位置は以下の通りです。
ASCII: 0
Unicode: U+0000
EBCDIC: 0
関連項目
制御文字
Null
脚注
注釈
特になし
出典
特になし
外部リンク
Null Byte Injection - WASC Threat Classification のヌルバイトインジェクションの説明
*
Poison Null Byte Introduction - ヌルバイトインジェクションの概説