استخدام خاصية: InvariantCulture
الخاصية: InvariantCulture لا تمثل ثقافة محايدة ولا ثقافة معينة. هي تمثل نوع ثالث من الثقافة بدون تحسس للثقافة. تكون مقترنة باللغة الإنجليزية و لكن ليس بالبلد أو المنطقة. يمكن لتطبيقاتك استخدام هذه الخاصية مع كل الأساليب تقريباً في مساحة الاسم: System.Globalization يتطلب ثقافة. ومع ذلك، يجب على التطبيق استخدام الثقافة الثابتة فقط من للعمليات التي تتطلب نتائج غير معتمدة على الثقافة، مثل تنسيق و تحليل البيانات المتصلة بملف. في حالات أخرى، قد تصدر نتائج غير صحيحة لغوياً أو غير مناسبة ثقافياً.
اعتبارات الأمان
إذا كان سيتم اتخاذ قرار أمان بناءً على نتيجة مقارنة بين السلاسل أو تغيير الحالة، يجب على التطبيق الخاص بك استخدام مقارنة تريبية التي تتجاهل الحالة بدلاً من استخدام InvariantCulture. التنفيذات الافتراضية للأساليب مثل Compare() و ToUpper تستخدم الخاصية: CurrentCulture . التعليمات البرمجية التي تقوم بإجراء عمليات السلاسل المتحسسة للثقافة قد تتسبب في حدوث ثغرات أمنية إذا تم تغيير: CurrentCulture أو إذا كانت الثقافة على الكمبيوتر الذي يقوم بتشغيل التعليمات البرمجية مختلفة عن الثقافة المستخدمة في اختبار التعليمات البرمجية. السلوك المتوقع عند كتابة عملية سلاسل يختلف عن السلوك الفعلي للتعليمات البرمجية الخاصة بك على الكمبيوتر المنفذ. وفي المقابل، تعتمد المقارنة الترتيبية فقط على القيمة الثنائية للأحرف التي تمت مقارنتها.
عمليات السلاسل
إذا كان التطبيق الخاص بك بحاجة إلى القيام بعملية سلاسل متحسسة للثقافة و غير متأثرة بقيمة CurrentCulture، فيجب استخدام أسلوب يقبل معامل CultureInfo . يجب على التطبيق تحديد قيمة الخاصية: InvariantCulture لهذا المعامل. يجب على التطبيق استخدام الخاصية مع الأساليب مثل Compare() و ToUpper للتخلص من التباينات الثقافية و للتأكد من تناسق النتائج. للحصول على مزيد من المعلومات حول استخدام خاصية: InvariantCulture لتنفيذ عمليات سلاسل بدون تحسس الثقافة، راجع عمليات السلاسل الغير متحسسة للثقافة.
البيانات الثابتة
الخاصية: InvariantCulture مفيدة من أجل تخزين البيانات التي لن يتم عرضها مباشرة للمستخدمين. تخزين البيانات بتنسيق لا يعتمد على الثقافة، يضمن تنسيق معروف لا يتغير. عندما يقوم المستخدمون من ثقافات مختلفة بالاتصال بالبيانات, فإنه يمكن تنسيقها بشكل مناسب استناداً إلى مستخدم محدد. على سبيل المثال، إذا قام التطبيق الخاص بك بتخزين أنواع DateTime في ملف نصي، منسق للثقافة الثابتة، يجب على التطبيق استخدام الخاصية InvariantCulture عند استدعاء ToString لتخزين السلاسل و الأسلوب Parse لاسترداد السلاسل. يضمن هذا الأسلوب أن القيم الأساسية للأنواع DateTime لا تتغير عند قراءة أو كتابة البيانات بواسطة المستخدمين من الثقافات المختلفة.
يوضح مثال التعليمات البرمجية التالي كيفية تهيئة كائن: CultureInfo بالثقافة الثابتة باستخدام سلسلة فارغة ("") أو InvariantCulture.
' The following lines are equivalent.
CultureInfo Invc = New CultureInfo("")
CultureInfo Invc = CultureInfo.InvariantCulture
// The following lines are equivalent.
CultureInfo Invc = New CultureInfo("");
CultureInfo Invc = CultureInfo.InvariantCulture;
يوضح مثال التعليمات البرمجية التالي كيفية كتابة كائن DateTime لملف كسلسلة منسقة للثقافة الثابتة باستخدام الأسلوب: ToString . بعد ذلك يتم قراءة السلسلة من الملف بتنسيق الثقافة الثابتة تحليلها إلى كائن: DateTime باستخدام الأسلوب: Parse . يتم بعد ذلك تنسيق الكائن: DateTime و عرضه للثقافات "fr - FR" و "ja-JP".
Imports System
Imports System.IO
Imports System.Globalization
Imports Microsoft.VisualBasic
Public Class TextToFile
Private const FILE_NAME As String = "MyDateFile.txt"
Public Shared Sub Main()
If File.Exists(FILE_NAME) Then
Console.WriteLine("{0} already exists!", FILE_NAME)
Return
End If
Dim sw As StreamWriter = File.CreateText(FILE_NAME)
'Creates a DateTime.
Dim dtIn As DateTime = DateTime.Now
Dim InvC As CultureInfo = CultureInfo.InvariantCulture
' Writes the string to the file formatted for InvariantCulture.
sw.WriteLine(dtIn.ToString("d", InvC))
sw.Close()
If Not File.Exists(FILE_NAME) Then
Console.WriteLine("{0} does not exist!", FILE_NAME)
Return
End If
Dim sr As StreamReader = File.OpenText(FILE_NAME)
Dim filedate As String
filedate = sr.Readline()
While Not filedate Is Nothing
Console.WriteLine(ControlChars.Newline + "The date stored in _
the file formatted for the invariant culture is:" + _
ControlChars.Newline + " {0}", filedate )
' Creates a new DateTime and parses the
' string stored in the file.
Dim dtout as DateTime = DateTime.Parse(filedate, InvC)
' Creates a CultureInfo set to "fr-FR".
Dim frc As New CultureInfo("fr-FR")
' Displays the date formatted for the "fr-FR" culture.
Console.WriteLine(ControlChars.Newline + "The date read from _
the file and formatted for the culture ""fr-FR"" is:" + _
ControlChars.Newline + " {0}", dtout.ToString("d", frc))
' Creates a CultureInfo set to "ja-JP".
Dim jpn As New CultureInfo("ja-JP")
' Displays the date formatted for the "ja-JP" culture.
Console.WriteLine(ControlChars.Newline + "The date read from _
the file and formatted for the culture ""ja-JP"" is:" + _
ControlChars.Newline + " {0}", dtout.ToString("d", jpn))
filedate = sr.Readline()
End While
Console.WriteLine(ControlChars.Newline + "The end of the stream _
has been reached.")
sr.Close()
End Sub
End Class
using System;
using System.IO;
using System.Globalization;
public class TextToFile
{
private const string FILE_NAME = "MyDateFile.txt";
public static void Main(String[] args)
{
if (File.Exists(FILE_NAME))
{
Console.WriteLine("{0} already exists!", FILE_NAME);
return;
}
StreamWriter sw = File.CreateText(FILE_NAME);
// Creates a DateTime.
DateTime dtIn = DateTime.Now;
// Creates a CultureInfo set to InvariantCulture.
CultureInfo InvC = new CultureInfo("");
// Converts dt to a string formatted for InvariantCulture,
// and writes it to a file.
sw.WriteLine (dtIn.ToString("d",InvC));
sw.Close();
if (!File.Exists(FILE_NAME))
{
Console.WriteLine("{0} does not exist!", FILE_NAME);
return;
}
StreamReader sr = File.OpenText(FILE_NAME);
String date;
while ((date=sr.ReadLine())!=null)
{
Console.WriteLine("\nThe date stored in the file formatted for
the invariant culture is:\n{0}" , date);
// Parses the string stored in the file,
// and stores it in a DateTime.
DateTime dtout = DateTime.Parse(date, InvC);
// Creates a CultureInfo set to "fr-FR".
CultureInfo frc = new CultureInfo("fr-FR");
// Displays the date formatted for the "fr-FR" culture.
Console.WriteLine("\nThe date read from the file and formatted
for the culture \"fr-FR\" is:\n{0}" , dtout.ToString("d",
frc));
// Creates a CultureInfo set to "ja-JP".
CultureInfo jpn= new CultureInfo("ja-JP");
// Displays the date formatted for the "ja-JP" culture.
Console.WriteLine("\nThe date read from the file and formatted
for the culture \"ja-JP\" is:\n{0}" , dtout.ToString("d",
jpn));
}
Console.WriteLine ("\nThe end of the stream has been reached.");
sr.Close();
}
}
تنتج هذه التعليمات البرمجية المخرج التالي:
The date stored in the file formatted for the invariant culture is:
07/24/2001
The date read from the file and formatted for the culture "fr-FR" is:
24/07/2001
The date read from the file and formatted for the culture "ja-JP" is:
2001/07/24
The end of the stream has been reached.