이 도움말 페이지에서는 Visual Basic에서 문화권 정보를 사용하여 문자열 변환 및 비교를 수행하는 방법을 설명합니다.
Culture-Specific 문자열을 사용하는 경우
일반적으로 사용자에게 제공되거나 사용자로부터 읽는 모든 데이터에는 문화권별 문자열을 사용하고, 애플리케이션의 내부 데이터에는 문화권 불변 문자열을 사용해야 합니다.
예를 들어 애플리케이션에서 사용자에게 날짜를 문자열로 입력하도록 요청하는 경우 사용자가 해당 문화권에 따라 문자열의 서식을 지정해야 하며 애플리케이션은 문자열을 적절하게 변환해야 합니다. 그러면 애플리케이션이 해당 날짜를 사용자 인터페이스에 표시하면 해당 날짜를 사용자의 문화권에 표시해야 합니다.
그러나 애플리케이션이 중앙 서버에 날짜를 업로드하는 경우 잠재적으로 다른 날짜 형식 간의 혼동을 방지하기 위해 특정 문화권에 따라 문자열의 형식을 지정해야 합니다.
Culture-Sensitive 함수
Visual Basic의 모든 문자열 변환 함수(Str
및 Val
함수 제외)는 애플리케이션 사용자 문화권에 적합하도록 변환 및 비교의 적절성을 애플리케이션의 문화권 정보를 사용하여 확인합니다.
문화권 설정이 다른 컴퓨터에서 실행되는 애플리케이션에서 문자열 변환 함수를 성공적으로 사용하는 핵심은 특정 문화권 설정을 사용하는 함수와 현재 문화권 설정을 사용하는 함수를 이해하는 것입니다. 애플리케이션의 문화권 설정은 기본적으로 운영 체제의 문화권 설정에서 상속됩니다. 자세한 내용은 , ,Asc, AscW, Chr, ChrW및 FormatHexOct하세요.
Str
(숫자를 문자열로 변환) 및 Val
(문자열을 숫자로 변환) 함수는 문자열과 숫자 간에 변환할 때 애플리케이션의 문화권 정보를 사용하지 않습니다. 대신 마침표(.)만 유효한 소수 구분 기호로 인식합니다. 이러한 함수의 문화적 인식 유사체는 다음과 같습니다.
현재 문화권을 사용하는 변환입니다.
CStr
및Format
함수는 숫자를 문자열로 변환하고,CDbl
및CInt
함수는 문자열을 숫자로 변환합니다.특정 문화권을 사용하는 변환입니다. 각 숫자 개체에는
ToString(IFormatProvider)
숫자를 문자열로 변환하는 메서드와Parse(String, IFormatProvider)
문자열을 숫자로 변환하는 메서드가 있습니다. 예를 들어Double
형식은 ToString(IFormatProvider) 및 Parse(String, IFormatProvider) 메서드를 제공합니다.
특정 문화 설정 사용
날짜(문자열 형식)를 웹 서비스로 보내는 애플리케이션을 개발한다고 상상해 보십시오. 이 경우 애플리케이션은 문자열 변환에 특정 문화권을 사용해야 합니다. 이유를 설명하기 위해 날짜 ToString() 의 메서드를 사용한 결과를 고려합니다. 애플리케이션에서 해당 메서드를 사용하여 7월 4일 날짜의 서식을 지정하는 경우 2005년 미국 영어(en-US) 문화권에서 실행할 때 "2005년 7월 4일 오전 12:00:00"을 반환하지만 독일어(de-DE) 문화권으로 실행하면 "04.07.2005 00:00"을 반환합니다.
특정 문화권 형식으로 문자열 변환을 수행해야 하는 경우 .NET Framework에 기본 제공되는 클래스를 사용해야 CultureInfo
합니다. 문화권의 이름을 생성자에 전달하여 특정 문화권에 대한 새 CultureInfo
개체를 CultureInfo 만들 수 있습니다. 지원되는 문화권 이름은 클래스 도움말 페이지에 나열 CultureInfo 됩니다.
또는 속성을 통해 CultureInfo.InvariantCulture의 인스턴스를 가져올 수 있습니다. 고정 문화권은 영어 문화를 기반으로 하지만 몇 가지 차이점이 있습니다. 예를 들어 고정 문화권은 12시간 시계 대신 24시간 시계를 지정합니다.
날짜를 해당 문화권의 문자열로 변환하려면 CultureInfo 개체를 날짜 개체의 ToString(IFormatProvider) 메서드에 전달하십시오. 예를 들어 다음 코드는 애플리케이션의 문화권 설정에 관계없이 "07/04/2005 00:00:00"을 표시합니다.
Dim d As Date = #7/4/2005#
MsgBox(d.ToString(System.Globalization.CultureInfo.InvariantCulture))
비고
날짜 리터럴은 항상 영어 문화권에 따라 해석됩니다.
문자열 비교
문자열 비교가 필요한 두 가지 중요한 상황이 있습니다.
사용자에게 표시할 데이터를 정렬합니다. 문자열이 적절하게 정렬되도록 현재 문화권에 따라 작업을 사용합니다.
두 애플리케이션 내부 문자열이 정확히 일치하는지 확인합니다(일반적으로 보안 목적으로). 현재 문화권을 무시하는 작업을 사용합니다.
Visual Basic StrComp 함수를 사용하여 두 가지 유형의 비교를 모두 수행할 수 있습니다. 비교 유형을 제어하기 위해 선택적 Compare
인수를 지정합니다: 대부분의 입력 및 출력에는 Text
을 사용하고 정확한 일치 항목을 결정하기 위해서는 Binary
을 사용합니다.
이 함수는 StrComp
정렬 순서에 따라 비교된 두 문자열 간의 관계를 나타내는 정수를 반환합니다. 결과에 대한 양수 값은 첫 번째 문자열이 두 번째 문자열보다 크다는 것을 나타냅니다. 음수 결과는 첫 번째 문자열이 더 작고 0은 문자열 간의 같음을 나타냅니다.
' Defines variables.
Dim testStr1 As String = "ABCD"
Dim testStr2 As String = "abcd"
Dim testComp As Integer
' The two strings sort equally. Returns 0.
testComp = StrComp(testStr1, testStr2, CompareMethod.Text)
' testStr1 sorts before testStr2. Returns -1.
testComp = StrComp(testStr1, testStr2, CompareMethod.Binary)
' testStr2 sorts after testStr1. Returns 1.
testComp = StrComp(testStr2, testStr1, CompareMethod.Binary)
.NET Framework의 파트너인 StrComp
함수 외에도 String.Compare 메서드를 사용할 수 있습니다. 이는 기본 문자열 클래스의 오버로드된 정적 메서드입니다. 다음 예제에서는 이 메서드를 사용하는 방법을 보여 줍니다.
Dim myString As String = "Alphabetical"
Dim secondString As String = "Order"
Dim result As Integer
result = String.Compare(myString, secondString)
비교를 수행하는 방법을 보다 세부적으로 제어하려면 메서드의 추가 오버로드를 Compare 사용할 수 있습니다. 이 메서드를 String.Compare 사용하면 인수를 comparisonType
사용하여 사용할 비교 유형을 지정할 수 있습니다.
인수의 comparisonType 값 |
비교 유형 | 사용 시기 |
---|---|---|
Ordinal |
문자열의 구성 요소 바이트를 기준으로 비교합니다. | 대/소문자를 구분하는 식별자, 보안 관련 설정 또는 바이트가 정확히 일치해야 하는 기타 비언어적 식별자를 비교할 때 이 값을 사용합니다. |
OrdinalIgnoreCase |
문자열의 구성 요소 바이트를 기준으로 비교합니다.OrdinalIgnoreCase 는 고정 문화권 정보를 사용하여 두 문자가 대문자만 다른 경우를 확인합니다. |
대/소문자를 구분하지 않는 식별자, 보안 관련 설정 및 Windows에 저장된 데이터를 비교할 때 이 값을 사용합니다. |
CurrentCulture 또는 CurrentCultureIgnoreCase |
현재 문화권에서 문자열의 해석을 기준으로 비교합니다. | 사용자에게 표시되는 데이터, 대부분의 사용자 입력 및 언어 해석이 필요한 기타 데이터와 비교할 때 다음 값을 사용합니다. |
InvariantCulture 또는 InvariantCultureIgnoreCase |
고정 문화권에서 문자열의 해석을 기준으로 비교합니다. 이는 Ordinal 및 OrdinalIgnoreCase 과 다릅니다. 불변 문화권은 허용 범위를 벗어난 문자를 동등한 불변 문자로 취급합니다. |
유지 데이터를 비교하거나 고정 정렬 순서가 필요한 언어 관련 데이터를 표시하는 경우에만 이러한 값을 사용합니다. |
보안 고려사항
애플리케이션이 비교 또는 대/소문자 변경 작업의 결과에 따라 보안 결정을 내리는 경우 그 작업은 String.Compare 메서드를 사용해야 하며, Ordinal
인수에 대해 OrdinalIgnoreCase
또는 comparisonType
를 전달해야 합니다.
참고하십시오
.NET