ヌル文字

ヌル文字(ヌルもじ、: null character)またはヌル終端文字(ヌルしゅうたんもじ、: null terminator)は、値0の制御文字である。NULと表記される場合もある[1]

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

用途

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

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

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

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

表記方法

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

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

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

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

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

符号位置

記号UnicodeJIS X 0213文字参照名称
�U+0000�
�
ヌル文字
U+2400␀
␀
symbol for null

関連項目

脚注

注釈

  1. YAMLではこの場合もヌル文字として扱われる

出典

  1. ASCII format for Network Interchange”. 2013年8月3日閲覧。 “NUL (Null): The all-zeros character which may serve to accomplish time fill and media fill.”
  2. "A byte with all bits set to 0, called the null character, shall exist in the basic execution character set; it is used to terminate a character string literal." — ANSI/ISO 9899:1990 (the ANSI C standard), section 5.2.1
  3. "A string is a contiguous sequence of characters terminated by and including the first null character" — ANSI/ISO 9899:1990 (the ANSI C standard), section 7.1.1
  4. (PDF) Working Draft, Standard for Programming Language C++ (ISO 14882 standard working draft), ISO/IEC, (28 February 2011), p. 427, N3242=11-0012, http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf 2013年2月27日閲覧, "A null-terminated byte string, or ntbs, is a character sequence whose highest-addressed element with defined content has the value zero (the terminating null character); no other element in the sequence has the value zero."
  5. MAN page of FIND 2014年8月17日(2014年8月22日閲覧)。
  6. 4.1.3 Characters and case - Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification W3C、2011年6月7日(2013年9月29日閲覧)。
  7. Kernighan and Ritchie, C, p. 38
  8. Null Byte Injection WASC Threat Classificationのヌルバイトインジェクションの説明

外部リンク

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.