Kültürün Visual Basic'de Dizeleri Etkilemesi

Bu Yardım sayfasında, Visual Basic'in dize dönüştürmeleri ve karşılaştırmaları gerçekleştirmek için kültür bilgilerini nasıl kullandığı açıklanır.

Kültüre Özgü Dizeler Ne Zaman Kullanılır?

Normalde, kullanıcılara sunulan ve kullanıcılardan okunan tüm veriler için kültüre özgü dizeler ve uygulamanızın iç verileri için kültür sabiti dizeleri kullanmanız gerekir.

Örneğin, uygulamanız kullanıcılardan dize olarak bir tarih girmesini isterse, kullanıcıların dizeleri kendi kültürlerine göre biçimlendirmesini beklemeli ve uygulamanın dizeyi uygun şekilde dönüştürmesi gerekir. Uygulamanız bu tarihi kullanıcı arabiriminde gösterirse, bunu kullanıcının kültüründe sunmalıdır.

Ancak, uygulama tarihi merkezi bir sunucuya yüklerse, farklı olabilecek tarih biçimleri arasındaki karışıklığı önlemek için dizeyi belirli bir kültüre göre biçimlendirmelidir.

Kültüre Duyarlı İşlevler

Tüm Visual Basic dize dönüştürme işlevleri (ve işlevleri hariç Str ), dönüştürmelerin ve Val karşılaştırmaların uygulama kullanıcısının kültürüne uygun olduğundan emin olmak için uygulamanın kültür bilgilerini kullanır.

Farklı kültür ayarlarına sahip bilgisayarlarda çalışan uygulamalarda dize dönüştürme işlevlerini başarıyla kullanmanın anahtarı, hangi işlevlerin belirli bir kültür ayarını ve hangilerinin geçerli kültür ayarını kullandığını anlamaktır. Uygulamanın kültür ayarlarının varsayılan olarak işletim sisteminin kültür ayarlarından devralındığını fark edin. Daha fazla bilgi için bkz Asc. , AscW, Chr, ChrW, Format, , Hex, Octve Tür Dönüştürme İşlevleri.

Str (sayıları dizelere dönüştürür) ve Val (dizeleri sayılara dönüştürür) işlevleri, dizeler ve sayılar arasında dönüştürme yaparken uygulamanın kültür bilgilerini kullanmaz. Bunun yerine, yalnızca dönemi (.) geçerli bir ondalık ayırıcı olarak tanır. Bu işlevlerin kültürel açıdan farkında olan analogları şunlardır:

  • Geçerli kültürü kullanan dönüştürmeler. CStr ve Format işlevleri bir sayıyı dizeye, CDbl ve CInt işlevleri ise bir dizeyi sayıya dönüştürür.

  • Belirli bir kültürü kullanan dönüştürmeler. Her sayı nesnesinin bir ToString(IFormatProvider) sayıyı dizeye dönüştüren bir yöntemi ve bir Parse(String, IFormatProvider) dizeyi sayıya dönüştüren bir yöntemi vardır. Örneğin, Double türü ve Parse(String, IFormatProvider) yöntemlerini sağlarToString(IFormatProvider).

Daha fazla bilgi için bkz. Str ve Val.

Belirli Bir Kültürü Kullanma

Bir Web hizmetine tarih (dize olarak biçimlendirilmiş) gönderen bir uygulama geliştirdiğinizi düşünün. Bu durumda, uygulamanızın dize dönüştürme için belirli bir kültür kullanması gerekir. Bunun nedenini göstermek için, tarihin ToString() yöntemini kullanmanın sonucunu göz önünde bulundurun: Uygulamanız 4 Temmuz tarihini biçimlendirmek için bu yöntemi kullanıyorsa, 2005, Birleşik Devletler İngilizce (en-US) kültürüyle çalıştırıldığında "4/7/2005 12:00:00 AM" döndürür, ancak Almanca (de-DE) kültürüyle çalıştırıldığında "04.07.2005 00:00:00" sonucunu döndürür.

Belirli bir kültür biçiminde bir dize dönüştürmesi gerçekleştirmeniz gerektiğinde, .NET Framework'te yerleşik olan sınıfı kullanmanız CultureInfo gerekir. Kültürün adını oluşturucuya geçirerek belirli bir kültür için CultureInfo yeni CultureInfo bir nesne oluşturabilirsiniz. Desteklenen kültür adları, sınıf Yardım sayfasında listelenir CultureInfo .

Alternatif olarak, özelliğinden sabit kültürün bir örneğini CultureInfo.InvariantCulture alabilirsiniz. Sabit kültür, İngiliz kültürünü temel alır, ancak bazı farklılıklar vardır. Örneğin sabit kültür, 12 saatlik saat yerine 24 saatlik bir saat belirtir.

Bir tarihi kültürün dizesine dönüştürmek için, nesnesini date nesnesinin ToString(IFormatProvider) yöntemine geçirinCultureInfo. Örneğin, uygulamanın kültür ayarlarından bağımsız olarak aşağıdaki kod "04/07/2005 00:00:00" değerini görüntüler.

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

Not

Tarih değişmez değerleri her zaman İngiliz kültürüne göre yorumlanır.

Dizeleri Karşılaştırma

Dize karşılaştırmalarının gerekli olduğu iki önemli durum vardır:

  • Kullanıcıya görüntülenecek verileri sıralama. Dizelerin uygun şekilde sıralanmaları için geçerli kültüre dayalı işlemleri kullanın.

  • İki uygulama iç dizesinin tam olarak eşleşip eşleşmediğini belirleme (genellikle güvenlik amacıyla). Geçerli kültürü göz ardı eden işlemleri kullanın.

Visual Basic StrComp işleviyle her iki karşılaştırma türünü de gerçekleştirebilirsiniz. Karşılaştırma türünü denetlemek için isteğe bağlı Compare bağımsız değişkeni belirtin: Text çoğu giriş ve çıkış Binary için tam eşleşmeleri belirlemek için.

İşlev, StrComp sıralama düzenine göre karşılaştırılan iki dize arasındaki ilişkiyi gösteren bir tamsayı döndürür. Sonuç için pozitif bir değer, ilk dizenin ikinci dizeden büyük olduğunu gösterir. Negatif sonuç, ilk dizenin daha küçük olduğunu, sıfır ise dizeler arasındaki eşitliği gösterir.

' 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)

işlevinin .NET Framework iş ortağı olan StrCompString.Compare yöntemini de kullanabilirsiniz. Bu, temel dize sınıfının statik, aşırı yüklenmiş bir yöntemidir. Aşağıdaki örnekte bu yöntemin nasıl kullanıldığı gösterilmektedir:

Dim myString As String = "Alphabetical"
Dim secondString As String = "Order"
Dim result As Integer
result = String.Compare(myString, secondString)

Karşılaştırmaların nasıl gerçekleştirildiğini daha ayrıntılı bir şekilde denetlemek için yöntemin Compare ek aşırı yüklemelerini kullanabilirsiniz. yöntemiyle String.Compare , hangi karşılaştırma türünün kullanılacağını belirtmek için bağımsız değişkenini comparisonType kullanabilirsiniz.

Bağımsız değişken değeri comparisonType Karşılaştırma türü ne zaman kullanılmalı
Ordinal Dizelerin bileşen baytlarına göre karşılaştırma. Büyük/küçük harfe duyarlı tanımlayıcılar, güvenlikle ilgili ayarlar veya baytların tam olarak eşleşmesi gereken diğer dilsel olmayan tanımlayıcıları karşılaştırırken bu değeri kullanın.
OrdinalIgnoreCase Dizelerin bileşen baytlarına göre karşılaştırma.

OrdinalIgnoreCase iki karakterin yalnızca büyük harfe çevirmede ne zaman farklı olduğunu belirlemek için sabit kültür bilgilerini kullanır.
Karşılaştırırken şu değeri kullanın: büyük/küçük harfe duyarlı olmayan tanımlayıcılar, güvenlikle ilgili ayarlar ve Windows'ta depolanan veriler.
CurrentCulture veya CurrentCultureIgnoreCase Geçerli kültürdeki dizelerin yorumunu temel alan karşılaştırma. Karşılaştırırken şu değerleri kullanın: kullanıcıya görüntülenen veriler, çoğu kullanıcı girişi ve dilsel yorumlama gerektiren diğer veriler.
InvariantCulture veya InvariantCultureIgnoreCase Sabit kültürdeki dizelerin yorumunu temel alan karşılaştırma.

Sabit kültür, kabul edilen aralığının dışındaki karakterleri eşdeğer sabit karakterler olarak değerlendirdiğinden, bu ve OrdinalIgnoreCasedeğerinden farklıdırOrdinal.
Bu değerleri yalnızca kalıcı verileri karşılaştırırken veya sabit bir sıralama düzeni gerektiren dilsel olarak ilgili verileri görüntülerken kullanın.

Güvenlikle İlgili Dikkat Edilmesi Gerekenler

Uygulamanız bir karşılaştırma veya büyük/küçük harf değiştirme işleminin sonucuna göre güvenlik kararları veriyorsa, işlemin yöntemini kullanması String.Compare ve bağımsız değişken için veya OrdinalIgnoreCase geçirmesi OrdinalcomparisonType gerekir.

Ayrıca bkz.