編集この項目では、コンピュータにおける区切り文字について説明しています。人間の言語の文字の区切り文字については「わかち書き」をご覧ください。CSVフォーマットのテキストファイルの一部の抜粋。赤色で示したコンマがフィールド区切り文字として使用されている。delimiter、デリミタ)は、プレーンテキストやデータストリーム中の独立した領域の境界を特定するために入れられる文字である[1]。各フィールドの境界を表す「フィールド区切り文字」の役割をしている。区切り文字は、データストリームで境界を指定する方法の1つである。別の方法として、各フィールドの先頭にフィールド長を記述する方法もある[2]。区切り文字は以下の2種類に分けられる。括弧やダブルクォート)フィールド区切り文字・レコード区切り文字編集フィールド区切り文字はデータフィールドを分離し、レコード区切り文字はフィールドのグループを分離する[3]。CSVファイルはコンマをフィールド間の区切り文字として、改行コードをレコード間の区切り文字として使用している。以下は、CSVファイルのフォーマットを使用した簡単なフラットファイルデータベースのテーブルの例である。いう)は、テキストの範囲の最初と最後を示すものである[4][5]。使われる範囲指定区切り文字には、以下のものがある[6]。LISPの構文は、主に丸括弧を使用することで判別可能である[7]。文字列リテラル(英語版)を表すのに使われる[10]。文字リテラルを表すのに使われる[10]。XMLの処理命令(英語版)を表すのに使われる[11]。いくつかのプログラミング言語でコメントを表すのに使われる[12]。いくつかのWebテンプレートで言語の境界を特定するのに使用する。プラットフォームによって特定の区切り文字が使われる[14]。以下に、そのいくつかの例を示す。collision)とは、テキスト中のある文字が区切り文字として解析され、意図しない動作を引き起こす問題である[3][16]。"$30,000")を入れようとするとフィールド区切り文字衝突が起こり、複数行の値を入れようとするとレコード区切り文字衝突が起こる。XMLの場合、フィールドに山括弧を含む値を入れようとすると区切り文字(フィールド区切り文字・レコード区切り文字のどちらも)衝突が起こる。テキストファイルではフィールド区切り文字・レコード区切り文字の衝突はよく発生する。悪意のあるユーザーや攻撃者は、この問題を故意に利用しようとするかもしれない。従って、区切り文字衝突は、セキュリティホールやエクスプロイトの原因となり得る。文字衝突は非常に一般的な問題なので、それを回避する様々な方法が考案されている。データストリームに現れそうにない文字(または文字列)を区切り文字として選ぶことによって、問題を回避する方法がある。この方法は多くの場合は通用するが、その文字がデータストリームに現れる確率はゼロではなく、また、悪意のある攻撃に対して安全ではない。よって、この方法は通常はとられない。ASCII制御文字編集ASCIIとUnicodeの文字セットではこの問題を回避するために、区切り文字として使用するための非表示の制御文字を用意している。ファイルの終端、または、別のファイルとの間。データのグループの間。単純な構造のデータファイルでは必要ない。レコードまたは行の終端。レコードの中のフィールドとフィールドの間。行の中のメンバとメンバの間。30のレコード分離文字をレコード区切り文字として使用することで、フィールド区切り文字・レコード区切り文字の問題は解決する[17]。区切り文字衝突の他の解決法として、エスケープ文字を使用する方法がある。これは、区切り文字の前にエスケープ文字を置くことで、その文字は区切り文字として使用する意図ではないことを明示するものである。言語設計の見地からはこれで十分であるが、以下のような欠点もある。大量のエスケープ文字が入ることで可読性が低くなる。Perlの正規表現の中で"/"という文字自体を使用したいときは"\/"のように書くが、"//"のように2つ続く場合は"\/\/"のようになる。日本語環境では円記号(\)に見える記号は英語環境などではバックスラッシュ(\)であり、"\/\/"のように斜めの線が大量に現れることから、これを斜め爪楊枝症候群(英語版)と言う。正規表現による解析が困難になる。エスケープ文字を意図しないときに、「エスケープをエスケープする」機構が必要になる。入力するのは簡単だが、その言語をよく知らない人によって理解ができなくなる[18]。エスケープシーケンス編集エスケープシーケンスはエスケープ文字と似ているが、衝突する文字そのものの代わりに別の文字列を使用する。Perlにおいて文字列リテラルの中にダブルクォートを含ませたいとき、以下のように書く。使用エスケープ文字を使うと以下のようになる。エスケープ文字を使用エスケープシーケンスの欠点は、それぞれの文字を意味するコードを覚える必要があることである(文字参照を参照)。2種類の区切り文字編集2種類の区切り文字は、区切り文字衝突を避けるためのエスケープ文字やエスケープシーケンスとは別の手段を提供する。2種類を文字列リテラルの区切り文字として使えるようになっている。Perlでは以下のようになる。crowd.';このように、エスケープを使わずに表現でき、可読性やコードを覚えなければいけない問題が解決する。この方法は、文字列が「両方の」種類の文字を含む場合には使えない。区切り文字の重複もまた、区切り文字衝突を避けるためのエスケープ文字やエスケープシーケンスとは別の手段を提供する。衝突する文字を重ねて書く方法である。Basicでは区切り文字にダブルクォートを用いる。区切り文字の重複は、区切り文字のエスケープと似ている。crowd."文字列リテラル内のダブルクォートを2回続けて書くことで、区切り文字でないことを示している。2種類の区切り文字同様、エスケープを使わずに表現できる。複数のクォートが連続して現れる場合には可読性が低くなる。上記のソースコード自体を表示させたい場合は、以下のようになる。crowd."""3種類以上の区切り文字編集2種類の区切り文字は2種類の範囲指定区切り文字を使用したが、3種類以上の区切り文字はその種類をさらに増やす[19]。以下はPerlでの例である。anymore.);いずれも、クォート演算子を用いることにより、意図した通りの出力がされる。どんな文字でも区切り文字の働きをさせることができる。この方法がより柔軟であるが、ほとんどの言語は対応していない。PerlとRubyは対応している[20][21]。マルチパートのメッセージにおいて、メッセージ中に現れないような文字列をパートの区切り文字として指定する方法である[22]。区切り文字は通常、統計学的に本文中に現れそうにないランダムな文字列から生成する。この後に、特定可能なマーク(UUID、タイムスタンプなど)が続く場合もある。区切り文字が本当に本文中に現れていないか確認することもある。この手法は、区切り文字を短かく、単純なものにすることができ、人間による可読性も向上する。(MIME、ヒアドキュメントも参照)空白・インデント編集いくつかのプログラミング言語やコンピュータ用言語では、テキスト中の独立した領域の境界を指定する手段として、空白文字による区切り文字やインデントが使用可能である[23]。正規表現を指定する際、Perlで「マッチ(一致)」と「置換」のために構文を単純化するのに代替の区切り文字が用いられる[24]。Perlでの単純なマッチの操作の構文は以下のようになる。1つ以上の母音にマッチこの構文は、区切り文字の衝突を避けるために、区切り文字を柔軟に変更できる。別の区切り文字を使用。別の区切り文字を使用。ヒアドキュメント編集ヒアドキュメントは、特別な終了文字列を指定することによって、任意の内容が含められるようにしている。PHP、Bash、Perlなどの多くの言語が対応している。ヒアドキュメントは、終了文字列の指定から始まり、改行の後、終了文字列が現れるまで続く[25]。以下はPerlによる例である。collisions.ENDOFHEREDOC上記のコードを実行すると、以下のように出力される。collisions.内容には、(終了文字列そのもの以外は)どんな文字でも含めることができる。バイナリデータのテキスト・エンコーディングのためのメカニズムとして使われるが、ASCII-armorは、いくつかの状況で区切り文字の衝突を避けるためにも使えるプログラミングとシステム管理のテクニックである[26][27]。この手法は複雑なため、小さなアプリケーションと単純なデータ記憶フォーマットにふさわしくない。区切り文字が送られたデータで現れないことを確実とするために、特別なエンコーディング・スキーム(例えばbase64)を使用する。この手法はマイクロソフトのASP.NETなどで使われており、そのシステムの"VIEWSTATE"コンポーネントと密接に関係している[28]。以下の簡略化された例は、この技術が実際にはどのように機能するかについて示す。このコードは"Well-formed"ではなく、正しく解釈されない。/>次のコード断片は同じHTMLタグを示しているが、VIEWSTATEの値をbase64でエンコードすることによって、区切り文字と衝突する文字が取り除かれている。/>次のコード断片は、同じHTMLタグをパーセントエンコーディングによって表した例である。文字としたい文字列中に存在しない文字を特定してその文字を区切り文字とし、区切り文字とした文字が何であるかを決められた位置(例えば、1文字目とか、最後の位置)に配置する。「\10,000」「\300」「aaa;」という文字列がある場合、カンマやセミコロンは区切り文字にならないから、それらの文字列中に存在しない文字、例えば「>」を区切り文字とし、「>\10,000>\300>aaa;」とする。2010年3月12日閲覧。2014年5月12日時点のオリジナル[リンク切れ]よりアーカイブ。2014年5月10日閲覧。3.0のもとで利用可能です。プライバシーデスクトップ。