双方向カテゴリー
双方向テキスト(LTR・RTL・弱・中立)における文字の振る舞いを決定するプロパティ。表示順序を決定するためにUnicode双方向アルゴリズムが使います。
What Is the Bidirectional Category?
The Bidi Class (formally Bidi_Class, also called bidirectional category) is a Unicode property that controls how characters are positioned in a line of mixed left-to-right (LTR) and right-to-left (RTL) text. It is the primary input to the Unicode Bidirectional Algorithm (UBA, described in Unicode Standard Annex #9), which determines the visual display order of characters in a paragraph.
Every code point is assigned one of 23 Bidi Class values. The algorithm uses these values—along with explicit directional override characters—to resolve the correct rendering order for Arabic mixed with English, Hebrew mixed with numbers, or any other bidirectional combination.
The Major Bidi Class Values
| Code | Name | Typical Characters |
|---|---|---|
| L | Left-to-Right | Latin letters, digits in LTR context |
| R | Right-to-Left | Hebrew letters |
| AL | Arabic Letter | Arabic and Thaana letters |
| EN | European Number | 0–9 |
| AN | Arabic Number | Arabic-Indic digits ٠–٩ |
| ES | European Separator | + − |
| ET | European Terminator | $ % ° |
| ON | Other Neutral | most punctuation |
| BN | Boundary Neutral | Format chars, ZWJ |
| NSM | Non-Spacing Mark | combining marks (inherit from base) |
| WS | Whitespace | space, tab |
| B | Paragraph Separator | U+2029 |
| S | Segment Separator | tab in certain contexts |
| LRE/RLE/LRO/RLO | Explicit Embedding | directional embedding characters |
| LRM/RLM | Mark | U+200E LEFT-TO-RIGHT MARK, U+200F |
| LRI/RLI/FSI/PDI | Isolate | Unicode 6.3+ directional isolates |
import unicodedata
chars = [("A", "Latin"), ("ب", "Arabic"), ("5", "Digit"),
("\u200F", "RLM"), ("\u200E", "LRM")]
for char, label in chars:
bc = unicodedata.bidirectional(char)
print(f" {label:12} U+{ord(char):04X} Bidi={bc}")
# Latin U+0041 Bidi=L
# Arabic U+0628 Bidi=AL
# Digit U+0035 Bidi=EN
# RLM U+200F Bidi=R
# LRM U+200E Bidi=L
Why It Matters in Practice
Without correct bidi handling, a string like "Hello مرحبا World" will display with the Arabic word in the wrong position or with punctuation displaced. HTML provides dir attributes and the Unicode characters U+200F (RLM), U+200E (LRM), and the bidi isolate characters (U+2066–U+2069) to guide the algorithm. Web developers working with RTL content must understand that the visual order of characters on screen differs from their logical (storage) order.
Quick Facts
| Property | Value |
|---|---|
| Unicode property name | Bidi_Class |
| Short alias | bc |
| Number of values | 23 |
| Python function | unicodedata.bidirectional(char) → string code |
| Algorithm spec | Unicode Standard Annex #9 (UAX #9) |
| Key characters | U+200E LRM, U+200F RLM, U+2066–U+2069 isolates |
関連用語
プロパティ のその他の用語
文字が最初に割り当てられたUnicodeバージョン。システムやソフトウェアバージョン間での文字サポートを判断するのに役立ちます。
Unicode property (UAX#11) classifying characters as Narrow, Wide, Fullwidth, Halfwidth, Ambiguous, or …
Unicode property controlling how Arabic and Syriac characters connect to adjacent characters. …
Unicode property listing all scripts that use a character, broader than the …
文字を大文字・小文字・タイトルケースに変換するルール。ロケール依存の場合があり(トルコ語のI問題)、1対多のマッピングもあります(ß → SS)。
文字が属する文字体系(例:ラテン、キリル、漢字)。Unicode 16.0は168個のスクリプトを定義し、Scriptプロパティはセキュリティと混在スクリプト検出に重要です。
サポートしていないプロセスで目に見える効果なく無視できる文字で、異体字セレクター・ゼロ幅文字・言語タグなどが含まれます。
名前付きの連続したコードポイント範囲(例:基本ラテン = U+0000〜U+007F)。Unicode 16.0は336個のブロックを定義し、すべてのコードポイントはちょうど1つのブロックに属します。
RTLコンテキストでグリフを水平に反転すべき文字。例:( → )、[ → ]、{ → }、« → »。
すべてのコードポイントを30個のカテゴリ(Lu・Ll・Nd・Soなど)の1つに分類する体系で、7つの主要クラス(文字・記号・数字・句読点・記号・区切り・その他)にグループ化されています。