string.ToLower () 및 string.ToLowerInvariant ()


답변:


149

현재 문화권에 따라 ToLower는 예상치 못한 문화 고유의 소문자를 생성 할 수 있습니다. ınfoi 대신 점없이 생성 info하여 문자열 비교를 수행하는 등의 작업. 따라서 언어가 아닌 데이터에는 ToLowerInvariant를 사용해야합니다. 모국어 / 문자 집합 인 사용자 입력이있을 경우 일반적으로 ToLower를 사용하는 것이 유일한 시간입니다.

이 문제의 예는이 질문을 참조하십시오. C #-ToLower ()가 때때로 문자 "I"에서 점을 제거합니다.


45

나는 이것이 유용 할 수 있다고 생각한다.

http://msdn.microsoft.com/en-us/library/system.string.tolowerinvariant.aspx

최신 정보

현재 문화권에 영향을받지 않는 예측 가능한 방식으로 문자열이 변경되는 경우 응용 프로그램에 의존하는 경우 ToLowerInvariant 메서드를 사용하십시오. ToLowerInvariant 메서드는 ToLower (CultureInfo.InvariantCulture)와 같습니다. 이 방법은 문자열 모음이 사용자 인터페이스 컨트롤에서 예측 가능한 순서로 나타나야 할 때 권장됩니다.

또한

... ToLower는 대부분의 장소에서 ToLowerInvariant와 매우 유사합니다. 문서는 이러한 방법이 터키 문화의 행동만을 변화시킬 것이라고 지적합니다. 또한 Windows 시스템에서 파일 시스템은 대소 문자를 구분하지 않으므로 사용이 더욱 제한됩니다.

http://www.dotnetperls.com/tolowerinvariant-toupperinvariant

hth


@danyolgiax 더 자세히 설명해 주시겠습니까? msdn의 링크에서 유용성을 유추 할 수 없습니다. 감사합니다
Prerak K

2
예 ToLowerInvariant가 터키어에서 예상대로 작동하지 않습니다. ı가됩니다
MonsterMMORPG

28

String.ToLower()기본 문화권을 String.ToLowerInvariant()사용하고 고정 문화권 을 사용합니다. 따라서 본질적으로 변하지 않는 문화와 서수 문자열 비교의 차이점을 묻습니다 .


아뇨. "Ordinal"은 현재 문화를 "무시"하는 약간 다른 방법 인 세 번째 옵션입니다. 차이점은 ToLower변형 을 논의하는 데 관련이 없습니다 . 순서 대 불변은 두 문자열의 "정렬 순서"만 변경하고 동일 비교는 변경하지 않습니다.
ToolmakerSteve

28

TL; DR :

"컨텐츠"(예 : 기사, 게시물, 댓글, 이름, 장소 등)를 다룰 때 사용하십시오 ToLower(). "literals"(예 : 명령 줄 인수, 사용자 지정 문법, 열거 형이어야하는 문자열 등)로 작업 할 때는을 사용하십시오 ToLowerInvariant().

예 :

= 사용 ToLowerInvariant잘못 =

터키어로 DIŞ"외부"와 diş"치아"를 의미합니다. 적절한 하부 케이싱은 DIŞ입니다 dış. 따라서 ToLowerInvariant잘못 사용 하면 터키에 오타가있을 수 있습니다.

= 사용 ToLower잘못 =

이제 SQL 파서를 작성하는 척하십시오. 어딘가에 다음과 같은 코드가 있습니다.

if(operator.ToLower() == "like")
{
  // Handle an SQL LIKE operator
}

문화권을 변경할 때 SQL 문법은 변경되지 않습니다. 프랑스 인은 SÉLECTIONNEZ x DE books대신에 글을 쓰지 않습니다 SELECT X FROM books. 그러나 위의 코드가 작동하려면 터키 사람이 작성해야합니다 SELECT x FROM books WHERE Author LİKE '%Adams%'(대문자 i 위의 점은 거의 볼 수 없음). 터키 사용자에게는 매우 실망 스러울 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.