2010-05-21 3 views

답변

4

. 아주 간단하게 기본적인 문제를 설명하려고합니다. 문자는 항상 단일 유니 코드 포인트를 나타냅니다. 문자 비교는 항상 같은 의미로는 상관없이 코드 포인트를 비교합니다.

동일한 의미로 문자를 비교하려면 문자열을 만들고 거기에 제공된 비교 방법을 사용해야합니다. 여기에는 다양한 문화에 대한 지원이 포함됩니다. Guffa의 답변을 참조하십시오.

1

cultureInfo는 C#의 문자를 비교하는 동안 문제가되지 않는다고 생각합니다. char는 이미 유니 코드 문자이므로 두 문자를 CultureInfo와 쉽게 비교할 수 있습니다.

+1

질문의 목표는 특정 문화에서 동일한 의미의 다른 유니 코드 문자에 대해 동등 함을 유지하는 것입니다. 예를 들어, (대소 문자를 무시할 때) i와 나는 영국에서는 동일하지만 터키에서는 동일하지 않습니다. – mafu

+0

나는 그가 자연 언어를 잘 이해하고 있다고 생각한다. –

+0

@mafutrct, @this : 예, 특정 문화 (예 : 칠면조) 내에서 숯을 비교할 가능성이 있는지 궁금합니다. 차이점이있는 것 같습니다. 문자와 비교하고 문자열에 캐스팅 된 두 개의 문자가 있습니다. – tanascius

2

시도해 보셨습니까 String.Compare 방법?

비교에서는 현재 문화권을 사용하여 케이스 규칙 및 개별 문자의 알파벳 순서와 같은 문화권 정보를 얻습니다. 예를 들어 문화권은 특정 문자 조합을 단일 문자로 취급하거나 대문자와 소문자를 특정 방식으로 비교하거나 문자의 정렬 순서가 앞에 또는 뒤에 오는 문자에 따라 달라 지도록 지정할 수 있습니다. 문자에 대한 문화 활성화 비교가 없습니다

String.Compare(str1, str2, false, new CultureInfo("en-US")) 
3

, 당신은 예를 들어 String.Compare(string, string, CultureInfo, CompareOptions) 방법을 사용할 수 있도록 문자열로 문자를 변환해야합니다.

예 :

비교 문자와 문자열 사이의 차이가 실제로있다
char a = 'å'; 
char b = 'ä'; 

// outputs -1: 
Console.WriteLine(String.Compare(
    a.ToString(), 
    b.ToString(), 
    CultureInfo.GetCultureInfo("sv-SE"), 
    CompareOptions.IgnoreCase 
)); 

// outputs 1: 
Console.WriteLine(String.Compare(
    a.ToString(), 
    b.ToString(), 
    CultureInfo.GetCultureInfo("en-GB"), 
    CompareOptions.IgnoreCase 
));