2012-11-08 3 views
10

가능한 중복 :
Why does string.Compare seem to handle accented characters inconsistently?문자열 부분 비교

나는 그것이 첫 번째 문자열의 일부가 될 수있는 방법은 다음 코드

var s1 = "ABzzzzz2"; 
var s2 = "äbzzzzz1"; 

var cmp = StringComparison.InvariantCultureIgnoreCase; 

Console.WriteLine(string.Compare(s1, 0, s2, 0, 7, cmp)); //prints -1 
Console.WriteLine(string.Compare(s1, 0, s2, 0, 8, cmp)); //prints 1 

는 부분보다 작습니다 첫 번째 문자열 전체가 두 번째 전체 문자열보다 큽니다.
x64, .net 2.0, 3.5, 4.0에서 테스트했습니다.

+1

마지막에 숫자가 순서를 정의하는 데 우선 순위가 있다고 생각됩니다. –

+1

@Jan '2'가 'b'로, '1'이 'a'로 바뀐 것과 같은 결과입니다. – Rawling

+2

샘플을 단순화 할 수 있습니다 :'var s1 = "a2"; var s2 = "ä1"; Btw, Umlaut는 중요합니다. –

답변

1

제 이론은 먼저 문자열을 정규화 한 다음 비교를 수행한다는 것입니다. 이 "äbzzzzz1"에 따르면 "abzzzzz1"로 정규화되었습니다. 정규화 된 형식의 첫 번째 비교는 동등한 결과를 산출하지만 실제 문자열이 같지 않으므로 0을 반환하는 것은 무효가됩니다. 따라서 서수 비교와 결과 -1로 되돌아갑니다.

두 번째 경우

, 정상화 후,이 결과는 이러한 접근 방식은 또한 정상화를 위해 this question 에 언급 된 경우를 설명 1.

그래서 "abzzzzz2는"세부 사항은 MSDN page

을 확인 "abzzzzz1"보다 큰 것이 분명하다