本文へ

CyberLibrarian

図書館員のコンピュータ基礎講座

書字方向

【2013-06-26更新】

文字を書き進める方向(書字方向)は、概ね、欧米では左から右の横書き(左横書き)、中東圏では右から左の横書き(右横書き)、漢字文化圏では右から左への縦書き(右縦書き)です。このページでは、左横書き以外の書字方向を持つ現代の文字・言語を挙げ、それらの記述方法について説明しています。

右横書き

右横書き(アラビア語)の例

右から左へ横書きする文字は、アラビア文字、ヘブライ文字、シリア文字です。これらの文字で表記される言語は次のとおりです。

文字 言語 ISO 639言語コード 備考
2文字 3文字
アラビア文字 アゼルバイジャン語 az aze 主にイランで使用
アラビア語 ar ara
ウイグル語 ug uig
ウルドゥー語 ur urd
カザフ語 kk kaz 主に中国で使用
カシュミール語 ks kas
キルギス語 ky kir 主に中国で使用
クルド語 ku kur
シンド語 sd snd
タタール語 tt tat
パシュトー語 ps pus
バルーチー語 bal
パンジャーブ語 pa pan 主にパキスタンで使用
ペルシャ語 fa per/fas
ベルベル語派(その他) ber
マレー語 ms may/msa 主にブルネイで使用
ヘブライ文字 イディッシュ語 yi yid
ヘブライ語 he heb
シリア文字 アラム語 arc
シリア語 syr
ターナ文字 ディベヒ語 dv div
  • 算用数字(アラビア数字)は左から右に記述し、アラブ文字で用いられるインド数字も左から右に記述します。
  • ヘブライ数字は右から左に記述します。
  • 各文字については、「Unicode(中東)」のページを参照してください。
  • 「ISO 639言語コード」については、「ISO 639言語コード」のページを参照してください。
ページのトップへ

左縦書き

左縦書き(モンゴル語)の例

左から右へ縦書きする文字は、モンゴル文字(蒙古文字)です。これらの文字で表記される言語は次のとおりです。

文字 言語 ISO 639言語コード
2文字 3文字
モンゴル文字 モンゴル語 mn mon

ページのトップへ

右縦書き

左縦書き(日本語)の例

右から左ヘ縦書きする文字は、漢字、平仮名、片仮名、ハングルです。これらの文字で表記される言語は次のとおりです。

文字 言語 ISO 639言語コード
2文字 3文字
漢字 中国語 zh chi/zho
ハングル、漢字 朝鮮語(韓国語) ko kor
漢字、平仮名、片仮名 日本語 ja jpn

これらの文字は、近代以降は、横書きと併用されています。特に、韓国は横書きが多くなっており、縦書きも左縦書きが多くなりつつあると言われています。

ページのトップへ

記述方法

英語では、左横書きをLeft to Right(LTR又はLR)、右横書きをRight to Left(RTLまたはRL)、左横書きと右横書きの混在をBi-Directional(BiDi)といいます。初期のコンピュータは米国を中心とする欧米で発展したため、左横書きが標準(デフォルト)となっています。右横書きや、左横書きと右横書きの混在を扱う時に、特別な記述が必要な場合があります。

Unicode

Unicodeの文字には、各文字の通常の書字方向に基づいて、書字の方向性が定められています。例えば、欧米の文字は右横書き、中東圏の文字は左横書きです。さらに、括弧や感嘆符を含む句読点などの右横書きでも左横書きでも用いられる文字は中立(neutral)とされています。Unicodeのこの仕様を、双方向アルゴリスムまたはBiDiアルゴリズムUnicode Bidirectional Algorithm外部へのリンク)と呼びます。

例えば、右横書きのヘブライ語で「こんにちは」を意味する「שלום」(シャローム)という語を「ש‎ל‎ו‎ם‎」の順に文字を記述すると、

שלום

と、双方向アルゴリスムに基づいて、自動的に右横書きで表示されます。

しかし、このアルゴリズムが上手く機能しない場合があります。そのため、Unicodeには、書字方向を指定するための制御文字が用意されています。例えば、この語の後に感嘆符「!」を付け、「שלום!‏」と表記したいとします。
ש‎ל‎ו‎ם‎!」の順に文字を記述すると、

שלום!

と表示されます。ヘブライ語の部分は、右から左へ正しく表記されていますが、左端に来るべき感嘆符が右端に配置されています。これは、ユーザ・エージェントが、ヘブライ語の4字を右横書きの文字であると認識して右から左に並べた後、中立な方向性を持つ感嘆符について、右横書き文字として扱うべきか、右横書き文字として扱うべきかを判断できず、デフォルトである左横書き文字として扱い、左横書き文字の語末の位置である右端に並べたため、こうなったのです。

Unicodeの仕様では、一般的に、中立な方向性を持つ文字は周辺の文字の影響を受けるとされており、左横書きの文字の間に挟まれた文字は左横書き、右横書きの文字の間に挟まれた文字は右横書きとして扱われます。例えば、この例文に、ヘブライ語で「みなさん」を意味する「לכולם」(ラ・クラム)という語を追加すると、

שלום!לכולם

となります。ヘブライ文字に挟まれた感嘆符が右横書きの文字として扱われ、「שלום」の左に配置されています。

前述の例「שלום!‏」を正しく表示させるためには、感嘆符の後に右横書きの文字を記述すれば良いということになります。そこで、右横書きの制御文字「U+200E」(文字参照で「‎」または「‏」)を感嘆符の後に置き、「ש‎ל‎ו‎ם‎!‏」の順に文字を記述すると、

שלום!‏

と、正しく表示されます。

別の例をご紹介します。ヘブライ語で「5月」を意味する「מאי」(マイ)という語の後に「(5月)」という丸括弧付きの日本語の説明を付け、「מאי‎(5月)」と記述したいとします。

מ‎א‎י‎(5月)」の順に文字を記述すると、

מאי(5月)

と表示されます。ヘブライ語の3字に続き、始め丸括弧「(」とアラビア数字「5」までが右横書きの文字と認識され、右から左に並べられています(始め丸括弧は左右に反転して表示されている)。その後、漢字の「月」と終わり丸括弧「)」は左横書き文字と認識され、左横書き文字の語末の位置である右端に右から左に並べられています。
これを解決するためには、「(5月)」の前に、左横書きの制御文字「U+200F」(文字参照で「‏」または「‎」)を置きます。つまり、「מ‎א‎י‎‎(5月)」の順に文字を記述すると、

מאי‎(5月)

と、正しく表示されます。

また別の例をご紹介します。Unicodeで左横書きと定められている日本語の文を右横書きにしたいとします。これは、Unicodeの双方向アルゴリスムを無効化し、右横書きに上書き変更する制御文字「U+202E」(文字参照で「‎」)を用います。例えば、「‮森永チヨコレート‬」と記述すると、

‮森永チヨコレート‬

と表示されます。なお、記述例の最後の「‬」は、文字の上書き区間を閉じる制御文字です。

ここでご紹介したものを含め、書字方向を指定するためのUnicodeの制御文字は次の通りです。

Unicode 名称 略称 文字参照 説明
200E Left-To-Right Mark LRM ‎ または ‎ 文字を左から右へ表記する。
200F Right-To-Left Mark RLM ‏ または ‏ 文字を右から左へ表記する。
202A Left-To-Right Embedding LRE ‪ 文字を左から右へ埋め込む。
202B Right-To-Left Embedding RLE ‫ 文字を右から左へ埋め込む。
202C Pop Directional Formatting PDF ‬ 文字の上書き区間を閉じる。
202D Left-To-Right Override LRO ‭ Unicodeの双方向アルゴリスムを無効化し、文字方向を左から右へと上書き変更する。
202E Right-To-Left Override RLO ‮ Unicodeの双方向アルゴリスムを無効化し、文字方向を右から左へと上書き変更する。
  • これらは、ゼロ幅(不可視)文字です。

なお、日本語の文中にヘブライ語を記述する場合は、「lang="he"」と言語を明記する必要がありますが、記述例では省略しました。以下の記述例も同様です。

HTML

HTMLにも、書字方向を指定するための方法が用意されています。

dir属性は、書字方向を指定するためのHTML属性です。

属性 説明
dir ltr 文字を左から右へ表記する。
rtl 文字を右から左へ表記する。

例えば、「<span dir="rtl">ש‎ל‎ו‎ם‎!</span>」と記述すると、

שלום!

と、正しく表示されます。

しかし、例えば、「מאי‎(5月)」と記述するために、「מ‎א‎י‎<span dir="ltr">(5月)</span>」と記述しても、

מאי(5月)

となり、「(5月)」の部分が正しい位置に表示されません(ヘブライ語の左側に表示される)。この場合には、dir属性ではなく、「U+200F」(文字参照:「&#x200f;」または&lrm;)を用いて、「מ‎א‎י&lrm;(5月)」と記述する必要があります。

CSS

CSSにも、書字方向を指定するための方法が用意されています。

directionプロパティは、書字方向を指定するためのCSSプロパティです。

プロパティ 説明
direction ltr 文字を左から右へ表記する。
rtl 文字を右から左へ表記する。

ただし、Unicodeの双方向アルゴリスムの方が優先されます。例えば、Unicodeで左横書きと定められている日本語の文を右横書きにしたい場合には、このプロパティは有効ではありません。「<span style="direction:rtl;">森永チヨコレート</span>」と記述しても、

森永チヨコレート

と表示されます。

directionプロパティは、unicode-bidiプロパティと併用することができます。

プロパティ 説明
unicode-bidi normal directionプロパティの値を無視し、Unicodeの双方向アルゴリスムを適用します。
embed 対象がインライン要素の場合、directionプロパティの値が追加・変更されます。ただし、Unicodeの双方向アルゴリズムは有効で、通常は双方向アルゴリズムが優先されます。
これは、Unicodeの制御文字U+202AまたはU+202Bを要素の先頭に、U+202Cを要素の末尾に記述した場合と同じ結果となります。
bidi-override Unicodeの双方向アルゴリスムを無効化し、directionプロパティの値を上書きします。
これは、Unicodeの制御文字U+202DまたはU+202Eを要素の先頭に、U+202Cを要素の末尾に記述した場合と同じ結果となります。

bidi-overrideの値を用いて双方向アルゴリスムを無効化すれば、directionプロパティの指定が有効になります。例えば、「<span style="direction:rtl;unicode-bidi:bidi-override;">森永チヨコレート</span>」と記述すると、

森永チヨコレート

と表示されます。

縦書き

縦書きについては、このページの執筆時点では、CSS3でサポートすべくW3Cで仕様を策定中です。

ポイント
Unicodeで収録されている古代の文字で、左横書き以外の書字方向を持っているものには、次のようなものがあります。

文字 Unicode範囲 説明
イ文字 A000~A48F、A490~A4CF 右横書き、右縦書き
オガム文字 1680~169F 左横書き、左縦書き(下から上)
突厥文字 10C00~10C4F 右横書き、稀に右縦書き(下から上)
パスパ文字 A840~A87F 左縦書き
ヒエログリフ 13000~1342F 左横書き、右横書き、左縦書き、右縦書き、1行ごとに書字方向が逆になる犂耕体(れいこうたい)
ページのトップへ
CyberLibrarian : tips on computer for librarians, 1998-