مشاركة عبر


تعيينات الحالة المخصصة و قواعد التصنيف

تعيينات الحالة، و الترتيب الأبجدي، و الاصطلاحات لتسلسل العناصر تختلف من ثقافة لأخرى. يجب أن تكون على علم بهذه الاختلافات و أن تفهم أنها يمكن أن تؤدي إلى اختلاف نتائج عمليات السلاسل استناداً إلى الثقافة.

قواعد تعيين الحالة الفريدة للأبجدية التركية توضح أن تعيينات الأحرف الكبيرة و الأحرف الصغيرة تختلف من لغة إلى لغة حتى عند استخدامهم معظم الأحرف نفسها. في معظم الأبجديات اللاتينية، الحرف "I" أي (Unicode 0069) هو إصدار الحرف الصغير من الحرف "I" أي (Unicode 0049). ومع ذلك، تتضمن الأبجدية التركية إصدارين من الحرف "I": أحدها بنقطة و الآخر بدون نقطة. بالتركية, الحرف "I" أي (Unicode 0049) يعتبر إصدار الحرف الكبير من حرف مختلف "I" أي (Unicode 0131). الحرف "I" أي (Unicode 0069) يعتبر إصدار الحرف الصغير من حرف آخر بعد "İ" أي (Unicode 0130). و نتيجةً لذلك: مقارنة السلاسل بدون تحسس حالة الأحرف بين الأحرف "I" أي (Unicode 0069) و "I" أي (Unicode 0049) و التي تنجح في معظم الثقافات، تفشل في الثقافة التركية (تركيا) المعينة ب "tr - TR".

ملاحظةملاحظة

كما تستخدم الثقافة الأزيرية (أذربيجان ، اللاتينية) المعينة ب "az - Latn-AZ" هذه القاعدة لتعيين الحالة.

يوضح مثال التعليمات البرمجية التالي كيف أن نتيجة عملية Compare() بدون تحسس لحالة الأحرف منفذة على سلاسل "file" و "FILE" تختلف وفقاً للثقافة. المقارنة ترجع true إذا كانت الخاصية CurrentCulture معينة إلى الثقافة الإنكليزية (الولايات المتحدة) ، المعينة ب"en - US". المقارنة ترجع false إذا كانت CurrentCulture معينة إلى التركية (تركيا) المعينة ب"tr TR".

Imports System
Imports System.Globalization
Imports System.Threading

Public Class TurkishISample
    Public Shared Sub Main()
        ' Set the CurrentCulture property to English in the U.S.
        Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
        Console.WriteLine("Culture = {0}", _
            Thread.CurrentThread.CurrentCulture.DisplayName)
        Console.WriteLine("(file == FILE) = {0}", String.Compare("file", _
            "FILE", True) = 0)
        
        ' Set the CurrentCulture property to Turkish in Turkey.
        Thread.CurrentThread.CurrentCulture = New CultureInfo("tr-TR")
        Console.WriteLine("Culture = {0}", _
            Thread.CurrentThread.CurrentCulture.DisplayName)
        Console.WriteLine("(file == FILE) = {0}", String.Compare("file", _
            "FILE", True) = 0)
    End Sub
End Class
using System;
using System.Globalization;
using System.Threading;

public class TurkishISample
{
    public static void Main()
    {
    // Set the CurrentCulture property to English in the U.S.
    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
    Console.WriteLine("Culture = {0}",   
        Thread.CurrentThread.CurrentCulture.DisplayName);
    Console.WriteLine("(file == FILE) = {0}", (string.Compare("file", 
        "FILE", true) == 0));

    // Set the CurrentCulture property to Turkish in Turkey.
    Thread.CurrentThread.CurrentCulture = new CultureInfo("tr-TR");
    Console.WriteLine("Culture = 
        {0}",Thread.CurrentThread.CurrentCulture.DisplayName);
    Console.WriteLine("(file == FILE) = {0}", (string.Compare("file", 
        "FILE", true) == 0));
    }
}

المخرج التالي يوضح كيف أن النتائج تختلف حسب الثقافة, لأن مقارنة الأحرف "I" و "I" بدون تحسس لحالة الأحرف تكون قيمتها true للثقافة "en - US" و false الثقافة "tr TR".

Culture = English (United States)
(file == FILE) = True
Culture = Turkish (Turkey)
(file == FILE) = False

تعيينات حالة مخصصة إضافية و قواعد إضافية للتصنيف

بالإضافة إلى تعيين الحالة الفريدة المستخدمة في الأبجدية التركية و الأزيرية ، يوجد تعيينات حالةأخرى مخصصة و قواعد تصنيف يجب أن تكون على علم بها عند التعامل مع عمليات السلاسل. هناك أبجديات خاصة بتسع ثقافات في النطاق ASCII أي (Unicode 0000 إلى 007F Unicode) تحتوي على أزواج من حرفين، تكون عندها نتيجة المقارنة بدون تحسس لحالة الأحرف ، على سبيل المثال، باستخدام Compare() ، لا تكون قيمتها "مساوية" عند اختلاط الحالة. هذه الثقافات هي:

  • الكرواتية (كرواتيا) "hr-HR"

  • التشيكية (جمهورية التشيك) ، "cs-CZ"

  • السلوفاكية (سلوفينيا)، "sk-SK"

  • الدانماركية (الدنمارك) ، "da-DK"

  • النرويجية (بوكمال، النرويج) "nb-NO"

  • النرويجية، (نينورسك، النرويج)، "nn-NO"

  • المجرية (المجر) ، "hu-HU"

  • الفييتنامية (فيتنام) ، "vi-VN"

  • الأسبانية (أسبانيا، النوع التقليدي) ، "es-ES_tradnl"

على سبيل المثال، في اللغة الدانمركية، مقارنة أزواج الحرفين "aA" و "AA" بدون تحسس لحالة الأحرف لا تعتبر متساوية. في الأبجدية الفيتنامية، مقارنة أزواج الحرفين "nG" و "NG" بدون تحسس لحالة الأحرف لا تعتبر متساوية. على الرغم من أنه يجب عليك أن تدرك أن هذه القواعد موجودة، إنه من غير المعتاد من الناحية العملية أن توضع في موقف حيث تكون المقارنة بتحسس الثقافة بين هذه الأزواج سبباً للمشاكل، لأنها غير شائعة في السلاسل الثابتة أو المعرفات.

و هناك أبجديات خاصة بست ثقافات داخل النطاق ASCII لها قواعد حالات قياسية و لكن لها قواعد تصنيف مختلفة. هذه الثقافات هي:

  • الإستونية (إستونيا) ، "et-EE"

  • الفنلندية (فنلندا) ، "fi - FI"

  • المجرية (المجر ، ترتيب النوع التقني) ، "hu-HU_technl"

  • الليتوانية (ليتوانيا) ، "lt-LT"

  • السويدية (فنلندا) "sv-FI"

  • السويدية (السويد) "sv-SE"

على سبيل المثال، في الأبجدية السويدية حرف "w" يصنف كما لو كان حرف "v". في التعليمات البرمجية للتطبيق تميل عمليات التصنيف إلى أن تكون أقل استخدماً من مقارنات التساوي و تكون بالتالي أقل احتمالاً أن تنشئ مشاكل.

و هناك 35 ثقافة إضافية لها تعيينات حالة مخصصة و قواعد تصنيف خارج النطاق ASCII. هذه القواعد تكون بشكل عام مقتصرة على الأبجديات المستخدمة من قبل الثقافات المعينة. لذلك، يكون احتمال إحداثهم مشكلات منخفض.

للحصول على تفاصيل حول تعيينات الحالة المخصصة و قواعد التصنيف التي تنطبق على ثقافات معينة راجع The Unicode Standard في الصفحة الرئيسية Unicode.

راجع أيضًا:

المبادئ

عمليات السلاسل الغير متحسسة للثقافة

موارد أخرى

تنفيذ عمليات سلاسل غير متحسسة للثقافة