2010-04-29 4 views
0

휄로우. 나는 변태적인 질문을 가지고있다. 용서 해주세요 :)양방향 표현이 지정된 유니 코드 문자열을 계산하는 방법은 무엇입니까?

양방향 유니 코드 텍스트를 표시하는 방법을 설명하는 공식 알고리즘이 있습니다. http://www.unicode.org/reports/tr9/tr9-15.html

나는 문제는 문자열이다 라틴어/히브리어 문자뿐만 아니라 숫자, 화이트 공백, 구두점 기호 등

를 포함 (일부 타사 소스에서) 문자열을받을 받은 양식은 이며 이미입니다. 나는. -받은 문자의 순서는 왼쪽에서 오른쪽으로 표시해야합니다.

지금, 제 목표는 표현이 정확히 같은 유니 코드 문자열을 찾는 것입니다. 의미 - 다른 엔터티에 해당 문자열을 전달해야합니다. 그런 다음 공식 알고리즘에 따라이 문자열을 렌더링하고 결과는 동일해야합니다.

다음과 같은 가정 : (렌더링 개체의)

  • 기본 텍스트 방향을 RTL이다.
  • 텍스트 방향을 명시 적으로 덮어 쓰는 "특수 유니 코드 문자"(예 : RLO, RLE 등)를 삽입하고 싶지 않습니다.
  • 몇 가지 해결책이있을 수 있습니다. 그렇다면 가능한 한 문자열의 RTL 모양을 보존하고 싶습니다. 문자열은 대개 히브리어 단어로 구성됩니다. 그 단어들과 그 단어 안에있는 문자들의 정확한 순서를 보존하고 싶습니다. 반면에 다른 문자 시퀀스는 바뀔 수 있습니다.

이 문제를 해결하는 단순한 방법은 전체 문자열을 바꾸는 것입니다 (히브리어 단어를 처리하는 것입니다). 그런 다음 히브리어가 아닌 문자 시퀀스를 바꿉니다. 그러나 실제 표현 규칙이 다소 복잡하기 때문에 항상 정확한 결과를 산출하지는 않습니다.

내가 지금까지 본 포괄적 인 알고리즘은 무차별 강제 점검뿐입니다. 문자열은 동일한 클래스 문자로 나눌 수 있습니다. 이러한 시퀀스는 임의의 순서로 결합 될 수 있으며, 그 중 임의의 시퀀스가 ​​역전 될 수 있습니다. 올바른 결과를 얻기 위해 모든 조합을 검사 할 수 있습니다. 더하기이 기술을 최적화 할 수 있습니다. 예를 들어 히브리어 단어의 순서가 알려져 있으므로 "결합"시퀀스의 여러 조합을 확인해야합니다.

더 좋은 아이디어가 있습니까? 아이디어가 있다면 전체 솔루션 일 필요는 없습니다. 괜찮습니다. 나는 어떤 생각을 주셔서 감사하겠습니다. 미리 감사드립니다.

답변

1

문자가 양방향인지 확인하려면 Unicode.org에서 제공하고 문자에 대한 많은 정보가 포함 된 UCD (유니 코드 문자 데이터베이스)를 사용해야합니다. 그 DB의 한 속성에서 당신이

그래서 당신이 USD를 다운로드 할 필요가 문자의 양방향성을 찾을 수 있습니다, 다음 대답에게 내가 오픈 소스에 이런 짓을

를 XML에 캐릭터를 찾아 반환하는 클래스를 작성 C# 응용 프로그램 및 여기에 그것을 입력 할 수 있습니다. http://Unicode.Codeplex.com

이 문제가 해결되었는지 여부를 알려주십시오.

0

나세르, 답변 해 주셔서 감사합니다. 불행히도 내 문제가 완전히 해결되지 않습니다.

지금까지 모든 캐릭터의 방향성을 알 수 있습니다. 여전히 전체 문자열을 계산하여 그 표현이 필요한 것과 일치 할 수있는 방법을 알지 못합니다.

하는 아랍어/히브리어 문자가 BIG로 표시되는 반면 당신이, 왼쪽에서 오른쪽으로 기록 된 다음과 같은 텍스트를 갖고 싶어 상상해

ABC의 ENG 123 456 DEF

올바른 문자열은 다음과 같이 될 것이다 : 또한, FED (456) (123) ENG CBA 나 : FED ENG 456 (123) CBA

또는,이처럼 쓸 수있는 명시적인 방향으로 재정의 코드를 사용하는 경우 : FED ENG (123) 456 CBA

,

현재 문자열에 명시적인 방향성 무시 코드를 주입하여이 문제를 해결했습니다. 히브리어/아랍어 단어의 순서를 분리하고 모든 LTR/약한/중립 문자를 결합하기 위해 나는 LTR에 대한 지시를 명시 적으로 무시합니다.

그러나 명시 적 재정의 코드를 삽입하지 않고이 작업을 수행하고 싶습니다.

관련 문제