2011-10-18 3 views
3
에 '소스'유니 코드

간단한 질문 :아랍어 : 최종 디스플레이 유니 코드

이 내가

을 찾고 최종 표시 문자열입니다 لعبة ديدة

이제 아래의 각이다 서로 붙어 있기 전에 분리 된 문자들 (합쳐지기 위해 각자 사이에 공백을 넣었습니다)

가 동일한 문자 NOT 얼마나 ل ع ب ة د ي د ة

노트, 일부 마법은 그 둘을 혼합한다 새로운 유니 코드 문자로 변환 변환이있다.

다음에 그 위에 문자가 실제로

그래서 내 간단한 질문이 있습니다 (메모리, 그들은이 왼쪽에서 오른쪽으로되어있다) 오른쪽에서 왼쪽으로 나타나고있다 : I는 플랫폼 독립적 인 C/C++ 기능을 얻을하는 곳 그것은 내 소스 16 비트 유니 코드 문자열을 취할 것이며 위의 첫 번째 유니 코드 문자열을 생성하는 변환을 수행 할 것인가? RTL 변환 및 가입?

내가 원했던 모든 것이 그 기능 중 하나입니다.

UPDATE :

좋아, 그래, 나는 '문자'는 같은 '문자'하지만 (크롬에서보고, 또는 최신 IE) 사람이 선명하게 할 수있는, 위의 두 가지 예에서와 동일하다는 것을 알고있다 글리프가 다른지 확인하십시오. 이제는 폰트 파일과 유니 코드 표준이 분리 된 여러 가지 문자 버전에 대해 서로 다른 글리프를 지정하는 것처럼 보이기 때문에이 변환을 유니 코드 수준에서 수행 할 수 있어야한다는 점은 상당히 확신합니다./글자. (unicode.org/charts/PDF/UFB50.pdf unicode.org/charts/PDF/UFE70.pdf)

그렇다면 필자는 유니 코드를 함수에 넣고 변환 된 유니 코드를 꺼낼 수 있습니까?

+2

을, 당신은 차이를 지적 할 수 있을까? 두 문자열은 첫 번째 문자열의 조인자와 두 번째 문자열의 공백을 제외하고는 완전히 동일하게 나타납니다. 그리고 그것들은 예상됩니다. 또한 메모리의 문자열은 왼쪽에서 오른쪽이 아닌 낮은 주소에서 높은 주소로 저장됩니다. LTR은 라틴 글꼴을 렌더링하는 방법입니다. – MSalters

+0

왼쪽/오른쪽 메모리가 없습니다. 전보다 더 낮거나 높은, 또는 원하는 경우 이전/이후. – rodrigo

+0

나는 이것을 할 수있는 어떤 표준 라이브러리도 모르지만 (비록 존재한다고 확신 할지라도), 당신이 구글에 필요한 구문은 "논리적 인 시각적 변환"이다. 코드 포인트는 "논리적"문자로 저장되지만 표시를 위해 "시각적"으로 변환해야합니다. – Vicky

답변

8

결합 및 RTL 변환 은 유니 코드 문자 수준에서 발생합니다. 즉

다음 위해 문자와 실제 유니 코드 코드 포인트의는 이 과정에서 변경되지 있습니다.

실제로 병합 및 처리 RTL/LTR 전환은 텍스트 렌더링 엔진에서 처리합니다.

the Wikipedia article on the Arabic alphabet에서이 인용은 아주 멋지게 설명 :

마지막으로, 아랍어의 유니 코드 인코딩, 즉, 문자를 순서대로 입력, 컴퓨터 메모리에 저장됩니다 논리적 인 순서에 종이 또는 화면에 표시 될 방향에 대해 걱정하지 않고 작성되고 발음됩니다. 다시 말하지만, Unicode의 bi-directional text 기능을 사용하여 정확한 방향으로 문자를 표시하는 것은 렌더링 엔진에 맡겨져 있습니다.이와 관련하여이 페이지의 아랍어 단어가 왼쪽에서 오른쪽으로 쓰여진 경우,이를 표시하는 데 사용되는 유니 코드 렌더링 엔진이 오래된 것입니다.

+2

아마 그는 정규화/정규화를 찾고있을 것입니다.이 경우는 시각적 인 속성이 아니라 실제로 코드 포인트를 결합/분할/재정렬합니다. –

+0

흠, 물론 텍스트의 재 배열은 텍스트 레벨에서 일어날 수 있습니다. 다른 글립 문자들과의 병합에 관해서는, 글쎄, 나는이 문자들이 무엇을위한 것이라고 생각 했는가? http://unicode.org/charts/PDF/UFB50.pdf http://unicode.org/charts/PDF/UFE70.pdf – matt

+0

@matt : 이러한 범위는 왕복 변환 전용입니다 (예 : from/to cp864, 위치가 변하는 다른 레거시 인코딩 (cp720, cp868, iso-859-6, cp1256)에는 위치 변형이 없습니다. – ninjalj

5

찾고있는 처리는 ligature입니다. 텍스트를 렌더링하기 위해 한 문자 씩 다른 문자를 넣을 수있는 많은 라틴 기반 언어와 달리 합자는 아랍어에서 기본적입니다. 대체는 텍스트 렌더링 엔진에서 수행되며 합자 정보는 일반적으로 글꼴 파일에 저장됩니다. 그들은 같은 문자 NOT 얼마나

참고

그들은 아랍어 독자 동일합니다. 그것은 여전히 ​​읽을 수 있습니다. 유니 코드 16 원본 텍스트에서 수행 할 변환이 없습니다. 전체 문자열을 텍스트 렌더러에 제공해야합니다. C/C++에서는 플랫폼 독립적 인 방법으로 Pango을 렌더링에 사용할 수 있습니다.

이 : 아마 당신은 لعبة جديدة (즉, 새로운 게임을) 쓰고 싶다? 예제로 제공하는 것은 아랍어에서는 의미가 없기 때문에.

+0

네, 메모에 언급했듯이 "لعبة جديدة" – ahmedsafan86

0

당신이 찾고있는 것은 아랍어 스크립트 합성 알고리즘입니다. 나는 오픈 소스로서 존재한다는 것을 모르고있다. 도착한 경우 게시하십시오.

몇 가지 포인트 : 스토리지 수준에서

, 아니 유니 코드 변환없는있다. 다른 답변에서 지적한대로 문자열의 추상 표현이 있습니다.

렌더링 수준에서 유니 코드 프레젠테이션 양식을 사용할 수 있지만 다른 양식을 사용할 수도 있습니다. 유니 코드 프레젠테이션 양식은 프레젠테이션 출력 인코딩이 표준이어야하는 것이 아니라 스크립트 합성을 사용하여 렌더링 엔진에서 출력 할 수있는 프레젠테이션 코드의 한 예일뿐입니다.

명확하게하기 : A가 표준 유니 코드 아랍 페이지이고 B가 표준 유니 코드 아랍어 프레젠테이션 양식 인 A에서 B로 변환되는 단일 표준 변환 (즉, 합성 알고리즘)이 없을 것입니다. 오히려 복잡성이 다양하고 B에 대해 서로 다른 인코딩 시스템을 사용할 수있는 변형이있을 수 있지만 B에 사용할 수있는 인코딩 중 하나는 유니 코드 프레젠테이션 형식입니다. 예를 들어 간단한 타자기 스타일을 사용하려면 프레젠테이션 양식이 필요없는 간단한 렌더링 알고리즘이 필요합니다. 실제로 A와 B가 실제로 동일한 현대 작문 스타일 (일반적인 사용법은 아님)이 있습니다. 단, 다른 폰트 페이지가 렌더링을 수행하는 데 사용됩니다. 반면, 조판 또는 전통적인 서체 양식을 렌더링하기위한 변환은 더욱 복잡하고 유니 코드 표현 양식과 비슷한 것을 필요로합니다. 나는이 오래된 질문 실현

3

,하지만 당신은 무엇을 찾고 있는지 : 여기

이 주제에 대한 자세한 내용은 포인터의 커플 FriBidi, Unicode bidirectional algorithm의 GNU 구현

이 프로그램은 질문에서 물어 본 글리프 선택과 양방향 텍스트 (오른쪽에서 왼쪽 및 왼쪽에서 오른쪽으로 쓰는 텍스트의 혼합)를 처리합니다. http://www.fileformat.info/info/unicode/block/arabic_presentation_forms_b/list.htm을이 REPO 살펴 유무 : :