ヌル文字

ヌル文字（ヌルもじ、）またはヌル終端文字（ヌルしゅうたんもじ、）は、値0の制御文字である。NULと表記される場合もある。

多くの文字集合にはヌル文字の定義がある。ISO/IEC 646（ASCII）、C0制御コード、C1制御コード、ISO/IEC 10646（Unicode）、EBCDICなどの文字集合は全てヌル文字を含んでいる。一方で、JIS X 0208などのように、これを収録しない文字集合もある。ASCII、Unicode、EBCDICなどではヌル文字はコードポイント0に当てられている。多くのプログラミング言語ではヌル文字を使用できる。C言語などでは、ヌル文字のコードは0であると定義されている。

用途 
ヌル文字は元々NOPと似たような意味で利用されていた。プリンターや端末にヌル文字を送っても何も起こらない（スペースとして表示するターミナルもあるがこれは誤り）。テレタイプ端末をコンピュータの出力デバイスとして使う際には、各行の末尾にヌル文字を（場合によっては複数）送信することで、機械的な印字機構が行頭に戻るための時間を稼いでいた。

紙テープではヌル文字は穴のない行として表現される（新品の紙テープは全てヌル文字で埋められていると考えてもよい）。この場合、穴のない行に新しく文字をパンチすることで、ヌル文字で埋められている箇所に文字を「挿入」できる。

今日においては、ヌル文字はC言語やその派生言語、および各種のデータフォーマットにおいて、文字列の終端を表す文字として重要な役割を担っている
。つまり、文字列の最後の文字の次にヌル文字を置くことで番兵の役割を持たせている。このような形式の文字列はヌル終端文字列（null-terminated byte string）と呼ばれる
。GNU版のfindやxargsでは、複数のファイル名をヌル文字で区切ることで、ホワイトスペースが含まれるファイル名を正しく扱えるようにするオプションがある。

このような特殊性もあってヌル文字を含むデータを正しくハンドリングできない処理系もあり、たとえばCascading Style Sheets 2.1においては、（エスケープによって生成したものを含めて）スタイルシートにヌル文字が含まれる場合の動作は未定義としている。

表記方法 
ソースコードの文字列リテラル中では、ヌル文字は\0のようなエスケープシーケンスの形で表記されることが多い。

多くの言語（この記法を導入したC言語を含む）では、これはヌル文字専用のエスケープシーケンスではないため注意が必要である。これは8進数で文字を表現しているだけであるため、\0の後に0から7の数字を続けて書くと、8進数2桁の数で表される文字として解釈されてしまう。

\0以外の表記方法として\000や\x00を使うプログラミング言語もある。Unicodeにおいては\u0000または\zがヌル文字を表す表現として用いられる。URL中に（特にユーザ入力由来の）ヌル文字が現れる場合は%00で置き換えられるが、これは「ヌルバイトインジェクション」と呼ばれる攻撃に対するセキュリティホールになるのを避けるためである。

キャレット記法ではヌル文字は^@で表わされる。US配列キーボードには、を押したままを入力するとヌル文字を入力できるものがある（US配列の場合を入力するにはを押しながらやを押下する）。ヌル文字をやで入力できる場合もある。

文書中では、ヌル文字を1em幅の"NUL"と書かれたシンボルで表現することがある。Unicodeにはこれに対応するグリフとして"symbol for null"（U+2400, ）があるが、あくまで"NUL"を表現するためだけのもので、これと実際のヌル文字（U+0000）は別物であるため注意が必要である。

符号位置

関連項目 
 制御文字
 Null

脚注

注釈

出典

外部リンク 
 Null Byte Injection WASC Threat Classificationのヌルバイトインジェクションの説明
 Poison Null Byte Introduction ヌルバイトインジェクションの概説

文字コード
無