2011-09-27 10 views
1
string word1 = ""; //see example 
string word2 = "";  
bool b1 = word1.StartsWith(word2); 
bool b2 = word1.Substring(0, word2.Length) == word2; 

일부 아랍어 문자열의 경우 b1은 b2와 같지 않습니까? 이 동작을 설명해 주시겠습니까?String.Starts가 예상대로 작동하지 않습니다.

예 :

차이가
word1 = ((char)0x0650).ToString()+ ((char)0x0652).ToString()+ ((char)0x064e).ToString(); 
word2 = ((char)0x0650).ToString()+ ((char)0x0652).ToString(); 
+4

몇 가지 예를 들려주세요. – ojlovecd

+1

@Ahmed 그들은 모두 'true'로 평가됩니다. –

+1

나는 아랍어 문자열이 경우 휴식을! –

답변

7

: .Equals은 (는 ==로 무엇을 사용)하지 않는 동안 .StartsWith은, 문화에 민감한 비교를 수행가.

문자열을 두 개 비교하면 문자별로 비교할 때 (== false를 반환하지만 culture에 따라 같음) startswith가 true를 반환하면이 결과를 얻을 수 있습니다.

편집 나는이 당신의 예제 값을 시도하는 경우 :

bool b1 = word1.StartsWith(word2, StringComparison.Ordinal); 
bool b2 = word1.Substring(0, word2.Length).Equals(word2, StringComparison.Ordinal); 

모두 반환 "참".

+0

모든 StringComparison 값을 사용했습니다. 하지만 그것은 동일한 출력입니다 –

+0

하지만이 경우 InvariantCulture의 경우에도 동일한 결과를 제공해야합니다이 경우에는 아랍어 문화를 사용하고 있습니다 –

+0

@Ahmed [문화적으로 영향을주지 않는 문자열 비교 수행] (http : // msdn.microsoft.com/en-us/library/885e1sy1.aspx) –

관련 문제