2016-07-22 16 views
1

C# (.NET v4.0)과 Java에서 'İ'를 소문자로 변환하는 동작이 " 불변의 "문화.string.ToLowerInvariant() in C# vs String.ToLowerCase (Culture.ROOT) for Java 터키어 İ

Java의 경우 "İ".toLowerCase(Locale.ROOT)'i'을 반환합니다.

C#에서

, "İ".ToLowerInvariant()"İ".ToLower(CultureInfo.InvariantCulture) 모두 "İ"하지만 "İ".ToLower(new CultureInfo("en-EN")) 반환 'i'을 반환합니다.

Java가 변환을 제대로 수행하고 있지만 C#이 아닌 것처럼 보입니다. 이것은 C#의 버그입니까?

+1

C#은 큰 필드입니다. 귀하의 예제에서 어떤 버전의 .NET/CLR을 사용합니까? .NET 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.6? –

+0

완료. 질문에 추가됨. – bittusarkar

+0

'CultureInfo' 값은 변환을 수행 할 때 사용되는 문자 집합에 영향을 줄 수 있습니다. 영어는'InvariantCulture'가 특별한 터키어'¬' 문자를 포함하는 UTF-8 인코딩을 사용하는 ASCII 또는 ISO-8859-1을 사용하는 경향이 있습니다. –

답변

2

보세요. 도트 위

(문자표 라틴 자본 나 편지를 : 질문

İ

의 편지는 사실

U + 0130입니다 견적). 고정 문화권의 경우 ToUpperInvariant() 방법은 (이미 자본 이후) 문자 자체 을 반환하고 ToLowerInvariant 결과를해야에 대한한다 (우리가 어떤 문화 중 하나를 영어 또는 터키어를 사용하는 권리가 없습니다) 것을, 합리적인, 이럴 보인다

U + XXXX 등이 될 것을 :

그러나 점 이상으로 라틴어 작은 편지 I, 우리는는없는 편지 : 우리는 편지가 필요하지 않기 때문에

https://en.wikipedia.org/wiki/Dotted_and_dotless_I

은, 우리가 할 수있는 모든 원래의 그대로을 떠날 것입니다.

우리가 사용하는

"en-EN" (영어) 문화 우리가 점 이상
으로 그냥 좋은 오래된 영어I나 편지를 해당 따라서 ToLower()에 대한 i을 반환 할 권리가 있다고.

+0

나는 이해합니다. 이.내가 이해할 수 없었던 것은 자바가'Locale.ROOT'으로 그것을 어떻게 변환 할 수 있는가하는 것이다. 위의 변환 규칙은 Java에 적용되지 않습니까? 이것은 Java의 버그입니까? – bittusarkar

+0

http://stackoverflow.com/questions/11063102/using-locales-with-javas-tolowercase-and-touppercase –