2010-12-30 4 views
0

유니 코드 UTF-32 (int)를 소문자로 변환하는 방법을 찾고 있습니다.C# UTF-32 ToLower

Character.toChars(Character.toLowerCase(Character.codePointAt(text, i))) 

내가 Char.ConvertToUtf32에서 UTF-32을 가지고 있지만, 경우에게 그 값을 낮출 수있는 방법이있을 것 같지 않습니다 : 자바에서 이런 일이 트릭을 할 것입니다.

업데이트 : 문자/스트림 배열을 다루고 있는데 위의 Java 스 니핏과 비슷한 hi 대리자를 찾아 코드 포인트를 찾았습니다. 문자열을 앞뒤로 변환하는 것은 비효율적입니다.

+0

Utf32 데이터를 구성하는 바이트를 가져올 수 있습니까? –

+0

예, 문자 배열이 있습니다. – Scott

+0

답변을 업데이트했습니다. –

답변

0

이렇게하는 유일한 방법은 UTF-32를 String으로 변환하는 것입니다. 다음과 같은 것이 작동해야합니다.

static Int32 ToLower(Int32 c) 
{ 
    // Convert UTF-32 character to a UTF-16 String. 
    var strC = Char.ConvertFromUtf32(c); 

    // Casing rules depends on the culture. 
    // Consider using ToLowerInvariant(). 
    var lower = strC.ToLower(); 

    // Convert the UTF-16 String back to UTF-32 character and return it. 
    return Char.ConvertToUtf32(lower, 0); 
} 

귀하의 필요에 비효율적임을 나타냅니다. 벤치마킹 해 보셨습니까?

여전히 UTF-32로 케이스를 고집하고 있다면, 자신 만의 롤을 만들어야합니다. 운좋게도 유니 코드 컨소시엄은 대부분의 노력을 기울였습니다. 유니 코드 case folding file을 살펴보십시오. 이 파일을 파싱하여 적절한 구조로 데이터를 저장합니다. 그런 다음 원하는 형식으로 데이터와 함께 케이스를 직접 처리 할 수 ​​있습니다.

+0

"ToLowerInvariant"를 고려할 때 "I"를 소문자로 사용할 때 터키에서 일어날 일에 대해 생각해 보았는지 확인하십시오. –