양방향 텍스트

양방향 텍스트(bidirectional text)는 두 가지 텍스트 방향성, 즉 오른쪽에서 왼쪽으로 (RTL) 및 왼쪽에서 오른쪽으로 (LTR)를 포함한다. 일반적으로 다른 종류의 음소문자를 포함하는 텍스트를 의미하지만, 각 행의 텍스트 방향을 바꾸는 좌우 교대 서법을 지칭할 수도 있다.

예시는 RTL 히브리어 이름 사라(Sarah)이다: . 오른쪽의 신(ש), 가운데의 레쉬(ר), 왼쪽의 헤(ה)로 철자가 쓰인다. 많은 컴퓨터 프로그램들은 텍스트를 한 방향으로만 표시하도록 설계되었기 때문에 이를 올바르게 표시하는 데 실패했다.

페르시아 문자 및 아랍어와 같은 소위 오른쪽에서 왼쪽으로 쓰이는 문자는 대부분, 그러나 전적으로 그렇지는 않지만, 오른쪽에서 왼쪽으로 쓰인다—수학적 표현, 숫자 날짜 및 단위가 있는 숫자는 왼쪽에서 오른쪽으로 삽입된다. 이는 영어와 같은 왼쪽에서 오른쪽으로 쓰이는 언어의 텍스트가 그 안에 삽입될 때도 발생하며, 반대로 아랍어가 영어와 같은 왼쪽에서 오른쪽으로 쓰이는 문자에 삽입될 때도 발생한다.

 양방향 스크립트 지원 

양방향 스크립트 지원은 컴퓨터 시스템이 양방향 텍스트를 올바르게 표시하는 기능이다. 이 용어는 종종 "BiDi" 또는 "bidi"로 줄여서 쓰인다.

초기 컴퓨터 설치는 단일 문자 체계를 지원하도록 설계되었으며, 일반적으로 라틴 음소문자만을 기반으로 하는 왼쪽에서 오른쪽으로 쓰이는 문자에만 해당되었다. 새로운 문자 세트와 문자 인코딩을 추가하면 다른 여러 왼쪽에서 오른쪽으로 쓰이는 문자를 지원할 수 있었지만, 아랍계 문자 또는 히브리 문자와 같은 오른쪽에서 왼쪽으로 쓰이는 문자를 쉽게 지원하지 못했으며, 둘을 혼합하는 것은 실용적이지 않았다. 오른쪽에서 왼쪽으로 쓰이는 문자는 ISO/IEC 8859-6 및 ISO/IEC 8859-8과 같은 인코딩을 통해 도입되었으며, 글자를 (일반적으로) 쓰는 순서와 읽는 순서로 저장했다. 단순히 왼쪽에서 오른쪽으로의 표시 순서를 오른쪽에서 왼쪽으로의 표시 순서로 뒤집는 것이 가능하지만, 이렇게 하면 왼쪽에서 오른쪽으로 쓰이는 문자를 올바르게 표시하는 능력을 희생하게 된다. 양방향 스크립트 지원을 통해 쓰기 방향에 관계없이 같은 페이지에 다른 스크립트의 문자를 혼합할 수 있다.

특히, 유니코드 표준은 왼쪽에서 오른쪽 및 오른쪽에서 왼쪽으로 쓰이는 스크립트의 혼합을 인코딩하고 표시하는 방법에 대한 자세한 규칙과 함께 완전한 BiDi 지원을 위한 기반을 제공한다.

 유니코드 bidi 지원 

유니코드 표준은 문자가 '논리적으로', 즉 의도된 해석 순서대로 정렬되어야 하며, '시각적으로', 즉 보이는 순서대로 정렬되어서는 안 된다고 요구한다. 이 구분은 bidi 지원과 관련이 있는데, 어떤 bidi 전환에서도 시각적 표시는 '논리적'인 것이기를 멈추기 때문이다. 따라서 bidi 지원을 제공하기 위해 유니코드는 문자들의 논리적 순서를 올바른 시각적 표현으로 변환하는 알고리즘을 규정한다. 이를 위해 유니코드 인코딩 표준은 모든 문자를 '강한', '약한', '중립적인', '명시적 포맷팅'의 네 가지 유형 중 하나로 나눈다.

 강한 문자 
강한 문자는 명확한 방향을 가진 문자이다. 이 유형의 문자 예시에는 대부분의 알파벳 문자, 음절 문자, 한자, 비유럽 또는 비아랍 숫자, 그리고 해당 스크립트에만 특정적인 구두점 문자가 포함된다.

 약한 문자 
약한 문자는 모호한 방향을 가진 문자이다. 이 유형의 문자 예시에는 유럽 숫자, 동아랍어-인도 숫자, 산술 기호 및 통화 기호가 포함된다.

 중립 문자 
중립 문자는 문맥 없이는 방향을 결정할 수 없는 문자이다. 예시에는 단락 구분 기호, 탭 및 대부분의 기타 공백 문자가 포함된다. 콜론, 쉼표, 마침표 및 줄 바꿈 없는 공백과 같이 여러 스크립트에 공통적인 구두점 기호도 이 범주에 속한다.

 명시적 포맷팅 
"방향성 포맷팅 문자"라고도 불리는 명시적 포맷팅 문자는 알고리즘이 기본 동작을 수정하도록 지시하는 특수 유니코드 시퀀스이다. 이러한 문자는 "마크", "포함", "격리" 및 "재정의"로 세분화된다. 그들의 효과는 단락 구분 기호 또는 "팝" 문자가 나타날 때까지 계속된다.

 마크 

"약한" 문자가 다른 "약한" 문자 뒤에 오면 알고리즘은 첫 번째 인접한 "강한" 문자를 찾는다. 때때로 이것은 의도하지 않은 표시 오류로 이어진다. 이러한 오류는 "의사-강한" 문자로 수정되거나 방지된다. 이러한 유니코드 제어 문자를 마크라고 한다. 마크( 또는 )는 묶인 약한 문자가 해당 쓰기 방향을 상속하도록 위치에 삽입되어야 한다.

예를 들어, 아랍어(RTL) 구절에서 영어 상표명(LTR)에 대한 를 올바르게 표시하려면, 기호 뒤에 LTR 텍스트가 오지 않는 경우 상표 기호 뒤에 LRM 마크를 삽입한다 (예: ""). LRM 마크를 추가하지 않으면 약한 문자 ™는 강한 LTR 문자와 강한 RTL 문자에 인접하게 된다. 따라서 RTL 문맥에서는 RTL로 간주되어 잘못된 순서로 표시된다 (예: "").

 포함 
"포함" 방향성 포맷팅 문자는 명시적 포맷팅의 고전적인 유니코드 방법이며, 유니코드 6.3부터는 "격리"를 선호하여 사용이 권장되지 않는다. "포함"은 텍스트의 한 부분이 방향적으로 구별되게 처리되어야 함을 알린다. 포함 포맷팅 문자 범위 내의 텍스트는 주변 텍스트와 독립적이지 않다. 또한 포함 내의 문자는 외부 문자의 순서에 영향을 미칠 수 있다. 유니코드 6.3은 방향성 포함이 일반적으로 주변에 너무 강한 영향을 미쳐 불필요하게 사용하기 어렵다는 것을 인식했다.

 격리 
"격리" 방향성 포맷팅 문자는 텍스트의 한 부분이 주변 환경으로부터 방향적으로 격리되어 처리되어야 함을 알린다. 유니코드 6.3부터, 이들은 새 문서에서 사용이 권장되는 포맷팅 문자이다—대상 플랫폼이 이들을 지원하는 것으로 알려진 경우에 한해. 이 포맷팅 문자들은 방향성 포함이 일반적으로 주변에 너무 강한 영향을 미쳐 불필요하게 사용하기 어렵다는 것이 명확해진 후 도입되었다. 레거시 '포함' 방향성 포맷팅 문자와 달리 '격리' 문자는 범위 외부 텍스트의 순서에 영향을 미치지 않는다. 격리 문자는 중첩될 수 있으며, 포함 및 재정의 내에 배치될 수 있다.

 재정의 
"재정의" 방향성 포맷팅 문자는 부품 번호와 같은 특수한 경우에 사용될 수 있으며 (예: 영어, 숫자 및 히브리어 문자가 혼합된 부품 번호를 오른쪽에서 왼쪽으로 강제로 쓰도록), 가능한 한 사용을 피하는 것이 권장된다. 다른 방향성 포맷팅 문자와 마찬가지로 "재정의"는 서로 중첩될 수 있으며, 포함 및 격리 내에도 중첩될 수 있다.

 유니코드를 사용하여 재정의 
를 사용하면 텍스트 방향이 왼쪽에서 오른쪽으로에서 오른쪽에서 왼쪽으로 전환된다. 마찬가지로 를 사용하면 텍스트 방향이 오른쪽에서 왼쪽으로에서 왼쪽에서 오른쪽으로 전환된다. 유니코드 양방향 알고리즘을 참조하라.

 팝 
로 인코딩된 "팝" 방향성 포맷팅 문자는 가장 최근의 "포함", "재정의" 또는 "격리"의 범위를 종료한다.

 실행 
알고리즘에서 연결된 강한 문자들의 각 시퀀스를 "실행(run)"이라고 한다. 동일한 방향을 가진 두 "강한" 문자 사이에 위치한 "약한" 문자는 그들의 방향을 상속한다. 다른 쓰기 방향을 가진 두 "강한" 문자 사이에 위치한 "약한" 문자는 주 문맥의 쓰기 방향을 상속한다 (LTR 문서에서는 문자가 LTR이 되고, RTL 문서에서는 RTL이 된다).

 가능한 BiDi 문자 유형 표 

 보안 
유니코드 양방향 문자는 트로이 목마 소스 취약점에 사용된다.

비주얼 스튜디오 코드는 2021년 10월에 출시된 버전 1.62부터 BiDi 제어 문자를 강조한다.

비주얼 스튜디오는 2021년 12월 14일에 출시된 버전 17.0.3부터 BiDi 제어 문자를 강조한다.

 양방향 텍스트를 사용하는 문자 

 신성문자 
이집트어 신성문자는 양방향으로 쓰였는데, 뚜렷한 "머리"나 "꼬리"를 가진 기호는 줄의 시작을 향했다.

 한자 및 기타 CJK 문자 
한자는 특히 표지판(예: 명판)에서 어느 방향으로든 또는 수직으로(위에서 아래로, 그리고 오른쪽에서 왼쪽으로) 쓰일 수 있지만, 개별 문자의 방향은 변하지 않는다. 이는 중국의 관광 버스에서 흔히 볼 수 있는데, 회사 이름이 관례적으로 차량 앞쪽에서 뒤쪽으로—즉, 버스 오른쪽에서는 오른쪽에서 왼쪽으로, 버스 왼쪽에서는 왼쪽에서 오른쪽으로—쓰여 있다. 차량 오른쪽의 영어 텍스트도 종종 역순으로 쓰여 있다. (아래 관광 버스와 우편 차량 사진 참조.)

마찬가지로, 한중일 문자로 구성된 다른 CJK 문자들, 예를 들어 일본어 표기 체계와 한국어 표기 체계도 어떤 방향으로든 쓰일 수 있지만, 가로 왼쪽에서 오른쪽, 위에서 아래로, 그리고 세로 위에서 아래로 오른쪽에서 왼쪽으로가 가장 일반적인 두 가지 형태이다.

 좌우 교대 서법 
좌우 교대 서법은 고대 그리스어 비문, 고대 사바어 (고대 남아랍어 언어) 및 로바쉬 문자에서 발견되는 쓰기 방식이다. 이 쓰기 방식은 방향을 번갈아 가며, 일반적으로 각 연속된 줄에서 개별 문자를 뒤집는다.

 문 타입 
문 타입은 시각 장애인을 위한 촉각 알파벳으로 발명된 라틴 음소문자의 엠보싱 적응이다.
초기에는 줄 끝에서 텍스트 방향이 바뀌었다 (그러나 문자 방향은 바뀌지 않았다).
특수 엠보싱 선이 한 줄의 끝과 다음 줄의 시작을 연결했다.Moon Type for the Blind, Ramseyer Bible Collection, Kathryn A. Martin Library, University of Minnesota Duluth.
1990년경에는 왼쪽에서 오른쪽으로 방향이 바뀌었다.

 같이 보기 
 국제화와 지역화
 가로쓰기와 세로쓰기

 키릴 숫자
 오른쪽에서 왼쪽으로 마크
 텍스트 변환
 좌우 교대 서법

 각주 

 외부 링크 
 유니코드 표준 부록 #9 양방향 알고리즘
 양방향 텍스트 작성 기술에 대한 W3C 지침 - 예시 및 좋은 설명 포함
 ICU 유니코드 국제 구성 요소에는 양방향 알고리즘 구현 — 다른 국제화 서비스와 함께 포함되어 있다.

분류:문자 인코딩
분류:유니코드 알고리즘
분류:국제화와 지역화