Visual Basic에서 문화권이 문자열에 영향을 주는 방식

이 도움말 페이지에서는 Visual Basic이 문화권 정보를 사용하여 문자열 변환 및 비교를 수행하는 방법에 대해 설명합니다.

문화권별 문자열을 사용해야 하는 경우

일반적으로 사용자에게 표시되고 사용자로부터 읽는 모든 데이터에는 문화권별 문자열을 사용해야 하며 애플리케이션의 내부 데이터에는 문화권 고정 문자열을 사용해야 합니다.

예를 들어, 애플리케이션이 사용자에게 날짜를 문자열로 입력하도록 요청하는 경우 사용자는 해당 문화권에 따라 문자열 형식을 지정해야 하며 애플리케이션은 문자열을 적절하게 변환해야 합니다. 그런 다음 애플리케이션이 사용자 인터페이스에 해당 날짜를 표시하는 경우 사용자의 문화권에도 표시되어야 합니다.

그러나 애플리케이션이 날짜를 중앙 서버에 업로드하는 경우 잠재적으로 다른 날짜 형식 간의 혼동을 방지하기 위해 특정 문화권에 따라 문자열 형식을 지정해야 합니다.

문화권 구분 함수

모든 Visual Basic 문자열 변환 함수(StrVal 함수 제외)는 애플리케이션의 문화권 정보를 사용하여 변환 및 비교가 애플리케이션 사용자의 문화권에 적절한지 확인합니다.

문화권 설정이 다른 컴퓨터에서 실행되는 애플리케이션에서 문자열 변환 함수를 성공적으로 사용하려면 어떤 함수가 특정 문화권 설정을 사용하고 어떤 함수가 현재 문화권 설정을 사용하는지 이해해야 합니다. 애플리케이션의 문화권 설정은 기본적으로 운영 체제의 문화권 설정에서 상속됩니다. 자세한 내용은 Asc, AscW, Chr, ChrW, Format, Hex, Oct형식 변환 함수를 참조하세요.

Str(숫자를 문자열로 변환) 및 Val(문자열을 숫자로 변환) 함수는 문자열과 숫자 간 변환 시 애플리케이션의 문화권 정보를 사용하지 않습니다. 대신 마침표(.)만 유효한 소수 구분 기호로 인식합니다. 문화적으로 인식되는 이러한 함수의 유사점은 다음과 같습니다.

  • 현재 문화권을 사용하는 변환입니다. CStrFormat 함수는 숫자를 문자열로 변환하고, CDblCInt 함수는 문자열을 숫자로 변환합니다.

  • 특정 문화권을 사용하는 전환. 각 숫자 개체에는 숫자를 문자열로 변환하는 ToString(IFormatProvider) 메서드와 문자열을 숫자로 변환하는 Parse(String, IFormatProvider) 메서드가 있습니다. 예를 들어, Double 형식은 ToString(IFormatProvider)Parse(String, IFormatProvider) 메서드를 제공합니다.

자세한 내용은 StrVal를 참조하세요.

특정 문화권 사용

웹 서비스에 날짜(문자열 형식)를 보내는 애플리케이션을 개발한다고 가정해 보세요. 이 경우 애플리케이션은 문자열 변환을 위해 특정 문화권을 사용해야 합니다. 이유를 설명하려면 날짜의 ToString() 메서드를 사용한 결과를 고려합니다. 애플리케이션이 해당 메서드를 사용하여 2005년 7월 4일 날짜 형식을 지정하는 경우 미국 영어(en-US) 문화권으로 실행하면 "7/4/2005 12:00:00 AM"을 반환하지만 독일어(de-DE) 문화권으로 실행하면 "04.07.2005 00: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)

StrComp 함수의 .NET Framework 파트너인 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 고정 문화권의 문자열 해석을 기반으로 한 비교입니다.

이는 고정 문화권이 수락 범위 밖의 문자를 동등한 고정 문자로 처리하기 때문에 OrdinalOrdinalIgnoreCase와 다릅니다.
지속형 데이터를 비교하거나 고정된 정렬 순서가 필요한 언어적으로 관련된 데이터를 표시하는 경우에만 이러한 값을 사용합니다.

보안 고려사항

애플리케이션에서 비교 또는 대/소문자 변경 작업의 결과에 따라 보안 결정 다음 작업을 사용 해야 합니다 String.Compare 메서드를 통과 Ordinal 또는 OrdinalIgnoreCase 에 대 한는 comparisonType 인수입니다.

참고 항목