引用符

テキスト中で引用、会話、強調などを示すために使われる記号。言語や地域によって形状が異なり、「」『』(日本語)、"" '' (英語)、«» (フランス語) など多様な種類がある。

引用符 (quotation mark) は、他者の発言の引用、作品名の表示、特殊な意味での語句の使用などを示す約物です。日本語では鉤括弧「」と二重鉤括弧『』が標準で、英語ではダブルクォーテーション "" とシングルクォーテーション '' が使われます。言語ごとに引用符の形状と使い方が異なるため、多言語テキストの処理では注意が必要です。

日本語では、会話文や直接引用に鉤括弧「」を使い、その内側にさらに引用が入る場合と、書名や作品名を示す場合に二重鉤括弧『』を使います。横書きで “ ” (U+201C / U+201D) を装飾的に使う例もありますが、標準は鉤括弧です。縦書きでは同じ文字が縦組み用の字形で表示されます。鉤括弧は全角文字なので、単純な文字数カウントでは開きと閉じでそれぞれ 1 文字を占めます。ただし X (旧 Twitter) のような重み付きのカウントでは全角の約物は 1 文字を 2 と数えるため、鉤括弧を足すと残りの字数が 2 ずつ減ります。

英語の引用符には、開きと閉じで字形が異なるもの (スマートクォート、カーリークォート) と、開閉で同じ字形を使う直線的なもの (ストレートクォート) の区別があります。前者は二重が U+201C と U+201D、一重が U+2018 と U+2019 で、出版物やワードプロセッサで使われます。後者は二重が U+0022 (")、一重が U+0027 (') で、タイプライターのキー配列に由来し、プログラミングやプレーンテキストで使われます。Unicode 上は別の文字なので、検索や照合では互いに一致せず、文字数カウントでも別の文字として扱われます。字形が似ているため画面上での判別は難しく、どちらが使われているかを確かめるにはコードポイントを見るのが確実です。

プログラミングにおいて、引用符は文字列リテラルの区切り文字として構文上の意味を持ちます。JavaScript では "hello"、'hello'、`hello` (テンプレートリテラル) の 3 種類が使えます。Python も同様に " と ' を区別なく使えますが、文字列内に引用符を含める場合はエスケープ (\") するか、別の種類の引用符で囲む必要があります。

引用符の「スマート変換」は文字数カウントの落とし穴です。Microsoft Word のオートコレクトや macOS のテキスト入力設定には、入力したストレートクォートをカーリークォートへ自動で置き換える機能があり、既定で有効なこともあります。U+0022 は UTF-8 で 1 バイトですが、U+201C や U+201D は 3 バイトになるため、バイト数で上限を測る場面ではコピーと貼り付けを経たテキストが予期しない長さになることがあります。この差は正規化では埋まりません。全角の引用符 U+FF02 は NFKC で U+0022 になる一方、カーリークォートは NFKC でも変化しないため、検索や重複判定で同一視したいなら自分で置き換える必要があります。

多言語対応では、引用符の種類がさらに増えます。フランス語はギュメ « » (U+00AB / U+00BB) を使い、引用の内側に分割禁止の空白を入れます。この空白も 1 文字として数えられます。ドイツ語は下側の U+201E で開き U+201C で閉じ、一重は U+201A と U+2018 を使います。ロシア語は主にギュメを使い、その内側の引用に U+201E と U+201C を使います。中国語は地域差が大きく、簡体字を使う地域では英語と同じ U+201C / U+201D (一重は U+2018 / U+2019) が標準で、繁体字を使う地域では日本語と同じ「」と『』が標準です。翻訳で元の言語の引用符をそのまま残すと、誤字と同じくらい目立つので、引用符の差し替えをローカライズの確認項目に入れておきます。

この記事を共有