2009-09-04 1 views

답변

5

위의 모든주의 사항은 다음과 같습니다. unicode collation algorithm (UCA) (코드 포인트 순서가 아님) "표준 범용 다국어 정렬"이 하나 있습니다. 커다란 눈짓에서 this page으로, ICU는 UCA와 지역 특혜의 혼합을 처리하는 것 같습니다.

5

더 합리적인 WA 없다 이것을 잘하려면 y. 동일한 알파벳 내에서도 모든 언어에 대해 보편적 인 정렬이 없습니다. 각기 다른 언어 (문화권, 기본적으로)는 단어 정렬 방법에 대한 서로 다른 조합 규칙을 제시합니다.

이 작업을 일관되게 수행하는 유일한 방법은 일반 오래된 코드 포인트 정렬 (예 : Java, String.compareTo)을 사용하는 것입니다.

데이터가 나타내는 내용에 따라 몇 가지 휴리스틱을 찾을 수 있습니다. 알파벳 및 언어에 대한 추측을 기반으로 문자열을 그룹화 한 다음 각 그룹에 로케일 별 정렬을 사용할 수 있습니다. 그러나 당신은 용어에 따라 다르게 추측 할 수 있기 때문에 (예 : 영어 동사 또는 스페인어 명사를 'mar') 어려운 방법 (코드를 직접 작성)을 수행해야합니다. 예측할 수없는 "오류"의 관점에서 순진한 유니 코드 숫자 정렬보다 나쁜 결과를 초래할 수도 있습니다.

다른 것들과 마찬가지로, 솔루션에 넣을 수있는 양과 필요한 성능의 종류에 따라 다릅니다.

이 제안은 사용자가 찾고있는 해답이 아닙니다. 문자열을 처음 저장할 때 로캘을 식별 할 수있는 방법이 있으면 그렇게하고 문자열의 메타 데이터의 일부로 기록하십시오. 그렇다면이 문제는 발생하지 않을 것입니다.

2

@Zac에서 언급했듯이 범용 정렬이 없습니다. 코드 포인트 정렬은 일관성이 있지만 사용자가 기대하는 바가 아닐 수 있습니다.

그래서 사용자가 선택한 로케일에 대해 기본 정렬 순서를 사용해야합니다. 해당 정렬 순서에 정의되지 않은 코드 포인트는 함께 그룹화됩니다.

0

'대상'언어 (한 스크립트 내에서)로 음역 할 수 있고 정렬 할 수 있습니다. 그러나 언어는 정렬에 대해 상충되는 규칙이 있습니다.

관련 문제