2009-11-25 5 views
5

대소 문자를 구분하지 않는 UTF-8 문자열 비교를위한 여러 가지 전략을 평가하려고합니다.언어를 알지 못하는 대문자 UTF-8

유니 코드 컨소시엄에서 ICU로 실험 한 몇 가지 자료를 읽고 다양한 구현 품질 대안을 제시하려고했습니다.

여러 경우에 단순 사례 매핑과 전체 사례 매핑간에 텍스트가 다른 것을 보았습니다. 그 차이점을 완전히 이해하고 싶었습니다.

내가 읽었을 때 Simple Case Mapping은 "컨텍스트 프리"즉, 페이로드가 어떤 언어인지 알 필요가 없습니다. 이것은 Turkic "I/ı/İ/i"사태로 인해 대략적인 결과를 제공합니다.

전체 사례 매핑은 매핑을 수행 할 수 있도록 페이로드의 언어를 알아야합니다. 그 추가 정보를 통해 투르크 문자열의 "김"은 대문자 "KIM"가되어야하고 영문 문자열의 "김"은 대문자의 "김"이되어야한다.

내가 맞습니까?

다른 언어로 다르게 표시되는 "다중면"코드 포인트의 다른 예가 있습니까?

감사합니다.

업데이트 : 언어 독립으로 간단한 대소 문자 매핑을 언급하는 출처 중 하나는 ICU's documentation입니다. 나는 이것을 유니 코드 진리로 해석하지만 구현의 진술 일뿐일까요?

답변

2

아니요, "전체 사례 매핑"은 하나의 코드 점을 둘 이상의 새로운 코드 점으로 대체해야하는 경우입니다. 간단한 대소 문자 매핑은 단일 코드 포인트 대체입니다.

직접 구현하려는 경우 유니 코드 CaseFolding.txt 파일이 이러한 권리를 얻는 데 중요합니다. 상태 필드 코드 "T", 특히 터키어 I 문제를 처리 할 수 ​​있음을 유의하십시오.

+0

그래서 둘 다 언어 문맥이 필요합니다. 맞습니까? 나는 CaseFolding.txt를 사용하지 않는 제 3 자 라이브러리 (PCRE)를 사용하지만 UnicodeData.txt의 사례 정보 만 사용하며 언어 내용 (명시 적 으로든 암묵적 으로든 내가 말할 수있는 한)을 요구하지 않습니다. 나는 이것이 Simple case에서 타당한 타협이라고 생각했다. –

+0

물론입니다. 파일에 명시된 바와 같이, "T"상태 코드로 레코드를 무시할시기를 알아야합니다. –

+0

내가 알 수있는 한 T 상태 코드는 CaseFolding에 나타납니다.txt이며 UnicodeData.txt가 아닙니다. 하지만 언어 컨텍스트에 대한 지식으로 만 접을 수 있다는 것을 정말로 말하고 있습니까? 나는 컨텍스트가 필요없는 타협을 찾고 있는데, 100 % 완벽하지는 않습니다.하지만 어쩌면 이것이 따뜻함의 첫 걸음일까요? –

2

음 ... 대부분의 서구 언어에서는 자음 조합 "SS"가 "ss"로 바뀌지 만 독일어에서는 특수 문자 "ß"가 될 수 있습니다. 그것은 단지 "힘"일 것입니다. 고려해야 할 것은 꽤 많이 있습니다 (usage rules).

이것은 직접적인 정렬 순서에는 영향을주지 않는다고 생각합니다. 물론 모든 독일인은 저를 고칠 수 있습니다. 물론 어쩌면 그것은 논점입니다.

+0

감사! 단순 매핑과 완전 매핑의 차이점을 정확히 이해 했습니까? –

+3

대문자 "ß"는 "SS"를 제공하지만, 오페라 (소문자 ("SS")가 "ß"로 나타나는) 프레임 워크를 보지 못했습니다. 가끔은 "ss"이어야하고 결정할 수있는 유일한 방법은 전체 독일어 사전을 사용하는 것입니다. 그리고 때로는 그것도 충분하지 않습니다 (예를 들어, "weiss"와 "weiß"모두 올바른 단어입니다). 실제로, 인간조차도 문맥 ("의미")없이 "WEISS"를 소문자로 만들 수 없습니다. –

+0

@Mihai - 감사합니다. 저도 같은 생각을했습니다. 상향 조정은 낮추는 것보다 훨씬 쉬울 것입니다. –

관련 문제