Sdílet prostřednictvím


Vlastní případy mapování a pravidla řazení

Případy mapování, abecední pořadí a konvence pro řazení položek se v různých jazykových verzích liší. Měli byste znát tyto odchylky a porozumět, že mohou způsobit výsledky operací s řetězci, které se liší v závislosti na jazykové verzi.

Jednoznačné pravidla případu mapování pro tureckou abecedu ilustrují, jak se mapování velkých a malých písmen liší od jazyka k jazyku, i když používají většinou stejná písmena. Ve většině abeced latinky je znak "I" (Unicode 0069) malá verze písmena znaku "I" (Unicode 0049). Turecká abeceda má ale dvě verze znaku „I“: s tečkou a bez tečky. V turečtině je znak "I" (Unicode 0049) považován za verzi s velkým písmenem jiného znaku "I" (Unicode 0131). Znak "I" (Unicode 0069) je považován za verzi malého písmena ještě jiného znaku "İ" (Unicode 0130). Jako výsledek porovnání řetězců nerozlišující velikost písmen znaků "I" (Unicode 0069) a "I" (Unicode 0049), který je úspěšný ve většině jazykových verzích, se nezdaří pro jazykovou verzi turečtina (Turecko), určené "tr-TR".

PoznámkaPoznámka

Jazyková verze Azerština (Ázerbajdžán, latinka), určená "az-Latn-AZ", také používá toto pravidlo případu mapování.

Následující příklad kódu ukazuje, jak se liší výsledek operace bez rozlišování velkých a malých písmen String.Compare na řetězci "FILE" a "file" v závislosti na jazykové verzi. Porovnání vrátí true, pokud je vlastnost Thread.CurrentThread.CurrentCulture nastavena na hodnotu jazykové verze Angličtina (Spojené státy), určené "en-US". Porovnání vrátí false, pokud je aktuální jazyková verze nastavena na turečtinu (Turecko) a označena „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));
    }
}

Následující výstup ukazuje, jak se liší výsledky podle jazykové verze, protože porovnání bez rozlišení velkých a malých písmen "I" a "I" je vyhodnoceno jako true pro jazykovou verzi "en-US" a false pro jazykovou verzi "tr-TR".

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

Další vlastní případy mapování a pravidla řazení

Vedle jedinečného případu mapování použitého v turečtině a azerštině existují další vlastní případy mapování a pravidla řazení, kterých byste si měli být vědomi při zvažování operace s řetězci. Abecedy devíti kultur v rozsahu standard ASCII (Unicode 0000 až Unicode 007F) obsahují dvojice dvou písmen, pro které se výsledek porovnání bez rozlišování velkých a malých písmen, například pomocí String.Compare nebude rovnat, pokud jsou velikosti různé. Tyto kultury jsou:

  • Chorvatština (Chorvatsko), "hr-HR"

  • Čeština (Česká republika), "cs-CZ"

  • Slovenština (Slovinsko), "sk-SK"

  • Dánština (Dánsko), "da-DK"

  • Norština (Bokmål, Norsko), "nb-NO"

  • Norština (Nynorsk, Norsko), "nn-NO"

  • Maďarština (Maďarsko), "hu-HU"

  • Vietnamština (Vietnam), "vi VN"

  • Španělština (Španělsko, tradiční řazení), "es-ES_tradnl"

Například srovnání dvojice dvou písmen v dánském jazyce bez rozlišování velkých a malých písmen "aA" a "AA" není považováno za rovné. Ve vietnamské abecedě bez rozlišování velkých a malých písmen porovnání dvojice dvou písmen "nG" a "NG" není považováno za rovné. Ačkoli je třeba si uvědomit, že tato pravidla existují, v praxi je neobvyklé, abyste se dostali do situace, kde srovnání citlivé na jazykovou verzi těchto párů vytvoří problémy, protože jsou neobvyklé v pevných řetězcích nebo identifikátorech.

Abecedy šesti jazykových verzí v rozsahu ASCII mají standardní pravidla pro používání velkých a malých písmen, ale různá pravidla řazení. Tyto kultury jsou:

  • Estonština (Estonsko), "et-EE"

  • Finština (Finsko), "fi-FI"

  • Maďarština (Maďarsko, technické pořadí řazení), "hu-HU_technl"

  • Litevština (Litva), "lt-LT"

  • Švédština (Finsko), "sv-FI"

  • Švédština (Švédsko) "sv-SE"

Například ve švédské abecedě se řadí písmeno "w", jako by bylo písmeno"v". V kódu aplikace se operace řazení používají méně často než porovnání na rovnost a proto je méně pravděpodobné, že vytvoří problémy.

Dalších 35 jazykových verzí mají vlastní případy mapování a pravidla řazení mimo rozsah standardu ASCII. Tato pravidla jsou obvykle omezena na abecedy používanými zvláštními jazykovými verzemi. Je proto nízká pravděpodobnost, že způsobí potíže.

Podrobné informace o vlastních případech mapování a pravidlech řazení, které jsou platné pro konkrétní jazykové verze, najdete ve standardu Unicode na domovské stránce konsorcia Unicode.

Viz také

Koncepty

Operace s řetězci nezávislé na jazykové verzi

Další zdroje

Provádění operací s řetězci, které jsou nezávislé na jazykové verzi