共用方式為


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

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

何時使用因文化特性而異的字串

通常,您應該對所有呈現給使用者和從使用者讀取的資料使用因文化特性而異的字串,並且對應用程式的內部資料使用不因文化特性而異的字串。

例如,如果應用程式要求使用者將日期輸入為字串,則它會預期使用者根據文化特性將字串格式化,而且應用程式會適當地轉換字串。 如果應用程式之後在使用者介面中呈現該日期,則應該以使用者的文化特性加以呈現。

然而,如果應用程式將日期上載到中央伺服器,則它應該根據某個特定文化特性將字串格式化,以免在可能不同的日期格式之間產生混淆。

區分文化特性的函式

所有 Visual Basic 字串轉換函式 (Str 和 Val 函式除外) 都會使用應用程式的文化特性資訊,確定轉換與比較工作適合於應用程式使用者的文化特性。

要在具有不同文化特性設定之電腦上執行的應用程式中順利地使用字串轉換函式,關鍵在於了解哪些函式使用特定的文化特性設定,以及哪些函式使用目前的文化特性設定。 請注意,應用程式的文化特性設定依預設是繼承自作業系統的文化特性設定。 如需詳細資訊,請參閱 AscAscWChrChrWFormatHexOct型別轉換函式 (Visual Basic)

在字串與數字之間進行轉換時,Str (將數字轉換為字串) 和 Val (將字串轉換為數字) 函式不會使用應用程式的文化特性資訊, 只會將句號 (.) 辨識為有效的小數分隔符號。 這些函式的文化特性感知的類似情況如下:

  • 使用目前文化特性的轉換:CStr 和 Format 函式會將數字轉換為字串,而 CDbl 和 CInt 函式則會將字串轉換為數字。

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

如需詳細資訊,請參閱 StrVal

使用特定文化特性

想像您正在開發一個會將日期 (格式化為字串) 傳送至 Web 服務的應用程式。 在此情況下,您的應用程式必須使用特定文化特性,進行字串轉換。 為了說明原因,請參考使用日期之 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 建構函式 (Constructor),為特定文化特性建立新的 CultureInfo 物件。 支援的文化特性名稱會列在 CultureInfo 類別說明網頁中。

此外,您可以從 CultureInfo.InvariantCulture 屬性取得「不因文化特性而異」(Invariant Culture) 的執行個體。 不因文化特性而異是以「英文」文化特性為準,但有一些差異。 例如,不因文化特性而異指定的是 24 小時制,不是 12 小時制。

若要將日期轉換為文化特性的字串,請將 CultureInfo 物件傳遞至日期物件的 ToString(IFormatProvider) 方法。 例如,不論應用程式的文化特性設定為何,下列程式碼都會顯示為 "07/04/2005 00:00:00"。

Dim d As Date = #7/4/2005#
MsgBox(d.ToString(System.Globalization.CultureInfo.InvariantCulture))
注意事項注意事項

日期常值 (Literal) 一律會根據英文文化特性解譯。

比較字串

需要字串比較的重要情況有兩種:

  • **將要顯示給使用者的資料排序。**使用以目前文化特性為基礎的作業,以便字串能適當地排序。

  • **判斷兩個應用程式內部的字串是否完全相符 (通常基於安全目的)。**使用不受目前文化特性影響的作業。

您可以使用 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 after TestStr2. Returns -1.
TestComp = StrComp(TestStr1, TestStr2, CompareMethod.Binary)
' TestStr2 sorts before TestStr1. Returns 1.
TestComp = StrComp(TestStr2, TestStr1)

您也可以使用 StrComp 函式的 .NET Framework 夥伴 (String.Compare 方法)。 這是個靜態 (Static)、多載的基底字串類別方法。 下列範例示範如何使用此方法:

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 方法,並且傳遞 comparisonType 引數的 Ordinal 或 OrdinalIgnoreCase。

請參閱

參考

型別轉換函式 (Visual Basic)

CultureInfo

其他資源

Visual Basic 中的字串簡介