共用方式為


文化特性如何影響 Visual Basic 中的字串

本說明頁面討論Visual Basic如何使用文化特性資訊來執行字串轉換和比較。

使用 Culture-Specific 字串的時機

一般而言,您應該針對向使用者呈現和讀取的所有數據使用特定文化特性字串,並針對應用程式的內部數據使用不因文化特性而異的字串。

例如,如果您的應用程式要求使用者輸入日期做為字串,它應該預期用戶會根據其文化特性來格式化字串,而應用程式應該適當地轉換字串。 如果您的應用程式接著在其使用者介面中顯示該日期,它應該會在使用者的文化特性中呈現該日期。

不過,如果應用程式將日期上傳至中央伺服器,它應該根據一個特定文化特性來格式化字串,以避免潛在的不同日期格式之間的混淆。

Culture-Sensitive 函式

所有 Visual Basic 字串轉換函式(除了 StrVal 函式除外)都會使用應用程式的文化特性資訊,以確保轉換和比較適用於應用程式使用者的文化特性。

在具有不同文化特性設定之計算機上執行的應用程式中成功使用字串轉換函式的關鍵,是瞭解哪些函式使用特定文化特性設定,以及哪些函式使用目前的文化特性設定。 請注意,應用程式的文化設定預設繼承自作業系統的文化設定。 如需詳細資訊,請參閱 AscAscW、、、ChrChrWFormatHex、、 Oct類型轉換函式

Str 在字串和數字之間轉換時,[將數字轉換成字串] 和 Val [將字串轉換成數位] 函式不會使用應用程式的文化特性資訊。 相反地,它們只會將句點 (.) 辨識為有效的小數分隔符。 這些具有文化意識的功能對應如下:

  • 使用目前的文化環境進行轉換。 CStrFormat 函式會將數字轉換成字串,而 CDblCInt 函式會將字串轉換成數字。

  • 使用特定文化特性的轉換。 每個 number 物件都有一個 ToString(IFormatProvider) 方法,可將數位轉換成字串,以及 Parse(String, IFormatProvider) 將字串轉換成數位的方法。 例如, Double 型別會提供 ToString(IFormatProvider)Parse(String, IFormatProvider) 方法。

如需詳細資訊,請參閱 StrVal

使用特定文化

假設您正在開發將日期(格式化為字串)傳送至 Web 服務的應用程式。 在此情況下,您的應用程式必須使用特定文化特性進行字串轉換。 為了說明原因,請考慮使用日期 ToString() 方法的結果:如果您的應用程式使用該方法來格式化日期 7 月 4 日, 2005 年,當與美國英文 (en-US) 文化特性一起執行時,它會傳回 “7/4/2005 12:00:00:00”,但當與德文 (de-DE) 文化特性一起執行時,它會傳回 “04.07.00:00”。

當您需要以特定文化特性格式執行字串轉換時,您應該使用 CultureInfo .NET Framework 內建的類別。 您可以將文化特性的名稱傳遞至CultureInfo建構函式,以建立特定文化特性的新CultureInfo物件。 支援的文化特性名稱會列在 CultureInfo [說明] 類別頁面中。

或者,您可以從 屬性取得 CultureInfo.InvariantCulture 的實例。 非變異文化特性是以英文文化為基礎,但有一些差異。 例如,不變性文化會指定使用 24 小時制,而不是 12 小時制。

若要將日期轉換成文化特性的字串,請將 對象傳遞 CultureInfo 至 date 物件的 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 函式會傳回一個整數,指示依照排序順序比較的兩個字串之間的關聯性。 結果的正值表示第一個字串大於第二個字元串。 負結果表示第一個字串較小,而零表示字串之間的相等。

' 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 中的數據。
CurrentCultureCurrentCultureIgnoreCase 根據當前文化中字串的解釋進行比較。 比較時使用這些值:向使用者顯示的數據、大部分的用戶輸入,以及其他需要語言解譯的數據。
InvariantCultureInvariantCultureIgnoreCase 以不因文化特性中的字串解譯為基礎的比較。

這與 OrdinalOrdinalIgnoreCase不同,因為非變異文化特性會將接受範圍以外的字元視為對等的不變異字元。
只有在比較保存數據或顯示需要固定排序順序的語言相關數據時,才使用這些值。

安全性考慮

如果您的應用程式根據比較或大小寫變更操作的結果做出安全性決策,則操作應該使用 String.Compare 方法,並傳遞 OrdinalOrdinalIgnoreCase 作為 comparisonType 參數。

另請參閱