Runtime: рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдкрд░рд┐рдЪрдпред рд░реВрдг

рдХреЛ рдирд┐рд░реНрдорд┐рдд 16 рд╕рд┐рддре░ 2017  ┬╖  106рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: dotnet/runtime

рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рд╕реЗ рдкреНрд░реЗрд░рд┐рдд:

https://github.com/dotnet/corefxlab/issues/1751

рдпреВрдирд┐рдХреЛрдб рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде .NET рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЪреБрдиреМрддрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдРрд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдЬреЛ рдЖрдЬрдХрд▓ рдЕрдкреНрд░рдЪрд▓рд┐рдд рд╣реИред рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╣рдо .NET рдореЗрдВ рд╡рд░реНрдгреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╣ System.Char рдХреЗ рд╕рд╛рде рд╣реИ рдЬреЛ рдПрдХ 16-рдмрд┐рдЯ рдорд╛рди рд╣реИ, рдЬреЛ рдпреВрдирд┐рдХреЛрдб рдорд╛рдиреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

.NET рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд░рд╣рд╕реНрдпрдордп рд╕рд░реЛрдЧреЗрдЯ рдЬреЛрдбрд╝реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ:

https://msdn.microsoft.com/en-us/library/xcwwfbb8 (v=vs.110).aspx

рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЗрд╕ рд╕рдорд░реНрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреНрдпрд╛рджрд╛рддрд░ рдЗрд╕рд▓рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдпреВрдирд┐рдХреЛрдб рдХреЗ рд╕рд╛рде рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдЕрдХреЗрд▓реЗ .NET рдЙрдирдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдкреЗрд╢рдХрд╢ рдХрд░рддрд╛ рд╣реИред

рдореЗрд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ System.Rune рдкреЗрд╢ рдХрд░реЗрдВ рдЬреЛ 32 рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ рдФрд░ рдЬреЛ рдПрдХ рдХреЛрдбрдкреЙрдЗрдВрдЯ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ рдФрд░ рд╣рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрдирд╛рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реА # рд╕рдордХрдХреНрд╖ rune рдкреНрд░рдХрд╛рд░ рдореЗрдВ рд╕рддрд╣ рдкрд░ рд╣реИрдВред

rune char рдХреЗ рд▓рд┐рдП рдкрд╕рдВрджреАрджрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдмрди рдЬрд╛рдПрдЧрд╛ рдФрд░ .NET рдореЗрдВ рдЙрдЪрд┐рдд рдпреВрдирд┐рдХреЛрдб рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдиреАрдВрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░реЗрдЧрд╛ред

рдХреНрдпреЛрдВ рдирд╛рдо рд░реВрдг рдХреЗ рд▓рд┐рдП, рдкреНрд░реЗрд░рдгрд╛ рдЧреЛ рд╕реЗ рдЖрддреА рд╣реИ:

https://blog.golang.org/strings

рдЦрдВрдб "рдХреЛрдб рдЕрдВрдХ, рд╡рд░реНрдг, рдФрд░ рд░рди" рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рдВрд╕реНрдХрд░рдг рд╣реИ:

"рдХреЛрдб рдкреЙрдЗрдВрдЯ" рдереЛрдбрд╝рд╛ рдорд╛рдЙрдердлреБрд▓ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЧреЛ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рд╢рдмреНрдж рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИ: рд░реВрдгред рдпрд╣ рд╢рдмреНрдж рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдЕрд░реНрде рдмрд┐рд▓реНрдХреБрд▓ "рдХреЛрдб рдмрд┐рдВрджреБ" рдЬреИрд╕рд╛ рд╣реА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдЬреЛрдбрд╝ рд╣реИред

рдЕрджреНрдпрддрди рдХрд░реЗрдВ рдЕрдм рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣рд╛рдВ System.Rune рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ:

https://github.com/migueldeicaza/NStack/blob/master/NStack/unicode/Rune.cs

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде:

public struct Rune {

    public Rune (uint rune);
    public Rune (char ch);

    public static ValueTuple<Rune,int> DecodeLastRune (byte [] buffer, int end);
    public static ValueTuple<Rune,int> DecodeLastRune (NStack.ustring str, int end);
    public static ValueTuple<Rune,int> DecodeRune (byte [] buffer, int start, int n);
    public static ValueTuple<Rune,int> DecodeRune (NStack.ustring str, int start, int n);
    public static int EncodeRune (Rune rune, byte [] dest, int offset);
    public static bool FullRune (byte [] p);
    public static bool FullRune (NStack.ustring str);
    public static int InvalidIndex (byte [] buffer);
    public static int InvalidIndex (NStack.ustring str);
    public static bool IsControl (Rune rune);
    public static bool IsDigit (Rune rune);
    public static bool IsGraphic (Rune rune);
    public static bool IsLetter (Rune rune);
    public static bool IsLower (Rune rune);
    public static bool IsMark (Rune rune);
    public static bool IsNumber (Rune rune);
    public static bool IsPrint (Rune rune);
    public static bool IsPunctuation (Rune rune);
    public static bool IsSpace (Rune rune);
    public static bool IsSymbol (Rune rune);
    public static bool IsTitle (Rune rune);
    public static bool IsUpper (Rune rune);
    public static int RuneCount (byte [] buffer, int offset, int count);
    public static int RuneCount (NStack.ustring str);
    public static int RuneLen (Rune rune);
    public static Rune SimpleFold (Rune rune);
    public static Rune To (Case toCase, Rune rune);
    public static Rune ToLower (Rune rune);
    public static Rune ToTitle (Rune rune);
    public static Rune ToUpper (Rune rune);
    public static bool Valid (byte [] buffer);
    public static bool Valid (NStack.ustring str);
    public static bool ValidRune (Rune rune);
    public override bool Equals (object obj);

    [System.Runtime.ConstrainedExecution.ReliabilityContractAttribute((System.Runtime.ConstrainedExecution.Consistency)3, (System.Runtime.ConstrainedExecution.Cer)2)]
    protected virtual void Finalize ();
    public override int GetHashCode ();
    public Type GetType ();
    protected object MemberwiseClone ();
    public override string ToString ();

    public static implicit operator uint (Rune rune);
    public static implicit operator Rune (char ch);
    public static implicit operator Rune (uint value);

    public bool IsValid {
        get;
    }

    public static Rune Error;
    public static Rune MaxRune;
    public const byte RuneSelf = 128;
    public static Rune ReplacementChar;
    public const int Utf8Max = 4;

    public enum Case {
        Upper,
        Lower,
        Title
    }
}

рдЬреНрдЮрд╛рдд рдореБрджреНрджреЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ

  • [x] рдКрдкрд░ рдХреБрдЫ рдПрдкреАрдЖрдИ рдПрдХ рд╕рдВрдХреЗрдд рд▓реЗрддреЗ рд╣реИрдВ, рдПрдХ рд░реВрдг рд▓реЗрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред
  • [ ] IComparable рдкрд░рд┐рд╡рд╛рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛
  • [ ] RuneCount/RuneLen рдХреЛ рдмреЗрд╣рддрд░ рдирд╛рдореЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдбреЙрдХреНрд╕ рджреЗрдЦреЗрдВ (рдЙрдиреНрд╣реЗрдВ рд╢рд╛рдпрдж Utf8BytesNeeded рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?)
  • [ ] рдКрдкрд░, "ustring" API рдореЗрд░реЗ UTF8 API рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ API рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдореЗрдВ System.String рдХрд╛ рдкреНрд░рд╡реЗрд╢ рджреНрд╡рд╛рд░ рд╣реИ, рдпрд╛ Utf8String рдХреЗ рд▓рд┐рдПред
api-needs-work area-System.Runtime up-for-grabs

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореИрдВрдиреЗ рдЗрд╕реЗ рдореВрд▓ рдЕрдВрдХ рдореЗрдВ рдХрд╣рд╛ рдерд╛ рдФрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдХрд╣реВрдВрдЧрд╛ред рдПрдХ рдорд╛рдирдХ рдЬреЛ рдХрд╣рддрд╛ рд╣реИ рдЙрд╕реЗ рдЫреЛрдбрд╝ рджреЗрдирд╛ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рднреНрд░рдорд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдФрд░, рдпреВрдирд┐рдХреЛрдб рдореЗрдВ рдПрдХ рд░реВрдг рдХреЛрдб рдкреГрд╖реНрда рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рднреНрд░рдорд┐рдд рдХрд░рддрд╛ рд╣реИред

рдирд╛рдо рдЧрд▓рдд рд╣реИред

рд╕рднреА 106 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдХреНрдпрд╛ рдЖрдк рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЗрди-рдореЗрдореЛрд░реА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ 32-рдмрд┐рдЯ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рддрд╛рд░ рд╣реЛрдВ, рдпрд╛ рдлреНрд▓рд╛рдИ рдкрд░ рдЕрдиреБрд╡рд╛рджрд┐рдд рд╣реЛрдВ? рд╕реНрдореГрддрд┐ рджреЛрд╣рд░реАрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдкреВрд░реНрд╡ рдЕрдЧрд░? рдпрджрд┐ рдмрд╛рдж рд╡рд╛рд▓рд╛ рд╣реИ рддреЛ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдХреНрдпрд╛ рдкреНрд░рднрд╛рд╡ рдкрдбрд╝рддрд╛ рд╣реИ?

рдХреНрдпрд╛ рдПрдХ рдпреВрдирд┐рдХреЛрдб-рд╕рдВрдмрдВрдзрд┐рдд рддрдХрдиреАрдХ рдХрд╛ рдирд╛рдордХрд░рдг рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдпреВрдирд┐рдХреЛрдб-рд╕рдорд░реНрдерд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ (рдФрд░ рдмреАрдПрдордкреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдмрд╛рдж рд╕реВрдХреНрд╖реНрдо рд╡рд┐рдорд╛рди рд╕рдорд░реНрдерди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдХрдиреАрдХ) рдХреЗ рдмрд╛рдж рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рд╕реНрддрд╛рд╡ (рдФрд░ рд╢рд╛рдпрдж рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ) рдпрд╣ рд╣реИ рдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХрд╛ рдЗрди-рдореЗрдореЛрд░реА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред Rune рдкреНрд░рдХрд╛рд░ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡реНрдпрдХреНрддрд┐рдЧрдд 21-рдмрд┐рдЯ рдХреЛрдб рдмрд┐рдВрджреБ (32-рдмрд┐рдЯ int рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд) рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рдХреЛрдб рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рддрд░реАрдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп Rune рд▓реМрдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ string рдореЗрдВ рдХреБрдЫ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ Rune рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рджреЗрдЧреАред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рдмрд┐рдВрджреБ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдореЗрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рд╣рдорддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  1. рдХреНрдпрд╛ рдореМрдЬреВрджрд╛ рддрд░реАрдХреЛрдВ рдХреА рддрд░рд╣ Int32 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп Rune рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдиреЗ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдореВрд▓реНрдп рд╣реИ?
  2. рдХреНрдпрд╛ "рд░реВрдг" рд╢рдмреНрдж рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ?

рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП (1), рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ Rune рдХреИрд╕реЗ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдХреМрди рд╕реЗ рддрд░реАрдХреЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдВрдЧреЗ, рдЖрджрд┐ рдХреЗ рдкреВрд░реНрдг рд╡рд┐рд╡рд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ Int32 рдХреЗ рд╕рд╛рде рд╕реМрджрд╛ рдХрд░рдиреЗ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп

рдЬрд╣рд╛рдБ рддрдХ (2) рдХреА рдмрд╛рдд рд╣реИ, рдореИрдВ рд╕реНрд╡рдпрдВ рдереЛрдбрд╝рд╛ рдЭрд┐рдЭрдХ рд░рд╣рд╛ рд╣реВрдБред "рд░реВрдг" рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдПрдХ рдЧреВрдврд╝ рд╢рдмреНрдж рдХреА рддрд░рд╣ рд╣реИ, рдФрд░ рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрд╕рд╛рдорд╛рдиреНрдп рдЕрд░реНрде рд╣реИрдВред рдПрдХ рдмрд╛рдд рдпрд╣ рднреА рд╣реИ рдХрд┐ рдЕрдиреНрдп рд▓реЛрдЧ рд▓рд╛ рд░рд╣реЗ рд╣реИрдВ: рдпрд╣ рдПрдХ рдЕрдиреНрдп рдпреВрдирд┐рдХреЛрдб рдЕрд╡рдзрд╛рд░рдгрд╛ рд╕реЗ рдЯрдХрд░рд╛рддрд╛ рд╣реИред рдЬрдм рдореИрдВ "рдпреВрдирд┐рдХреЛрдб рд░реВрдг" рдХреА рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд░реВрдирд┐рдХ рдпреВрдирд┐рдХреЛрдб рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддреЗ рд╣реИрдВ, рдФрд░ рдХреЗрд╡рд▓ рдХреБрдЫ рдЧреЛ рднрд╛рд╖рд╛ рджрд╕реНрддрд╛рд╡реЗрдЬ рдорд┐рд▓рддреЗ рд╣реИрдВред

char рдЖрдзрд╛ рд╢рдмреНрдж рдФрд░ рдкреВрд░рд╛ рд╢рдмреНрдж рджреЛрдиреЛрдВ рд╣реИ; рдФрд░ рдЖрдкрдХреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рдкрд░рд┐рд╡реЗрд╢ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛ - рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдЖрдзреЗ рдЕрдХреНрд╖рд░ рдпрд╛ рдкреВрд░реНрдг рдЕрдХреНрд╖рд░ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред

рд╢рд╛рдпрдж System.character рдЬрд╣рд╛рдВ рдпрд╣ рд╣рдореЗрд╢рд╛ рдПрдХ рдкреВрд░реНрдг рдЕрдХреНрд╖рд░ рд╣реЛрддрд╛ рд╣реИ ...: рдзреВрдк рдХрд╛ рдЪрд╢реНрдорд╛:

char рдПрдХ рднрдпрд╛рдирдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╛ рдПрдХ рд╕рд╛ рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ ascii/рд▓реИрдЯрд┐рди рдХреЗрд╡рд▓ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рднреА; рдЗрдореЛрдЬреА рдХрд╛ рдЙрджрдп рдЕрднреА рднреА рд╡реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛; рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ char рдПрдХ рдЪреЗрдХ рд╣реИ рдФрд░ рд╢рд╛рдпрдж рдЕрдЧрд▓реЗ char рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ

@NickCraver рдЯреНрд╡рд┐рдЯрд░ рдкрд░

рдЬрдмрдХрд┐ utf8 рдПрдХ рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдЪреМрдбрд╝рд╛рдИ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╣реИ; рдпрд╣ рджреБрд░реНрд▓рдн рд╣реИ (рдпрджрд┐ рдмрд┐рд▓реНрдХреБрд▓ рднреА?) рдХрд┐ рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдзреЗ рд╡рд░реНрдгреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ; utf8 рдФрд░ utf32 рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдПред

рдПрдиреНрдпреВрдорд░реЗрд╢рди рдХреЗ рд▓рд┐рдП 32-рдмрд┐рдЯ рдкреНрд░рдХрд╛рд░ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдкреНрд░рджрд░реНрд╢рди рдпрд╛ рд╕реНрдореГрддрд┐ рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рдХреЗ рд▓рд┐рдП рдЗрдВрдбреЗрдХреНрд╕рдСрдл, рд▓рдореНрдмрд╛рдИ рдЗрддреНрдпрд╛рджрд┐ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛрдЧрд╛ред

  1. рдПрдХ рдЕрдкрд╛рд░рджрд░реНрд╢реА рдкреНрд░рд╛рд░реВрдк рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдЯ рд╕рд░рдгреА рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реИ; рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░реВрдк рдХреЛ рдЙрд╕рдХреЗ рдореВрд▓ рдкреНрд░рд╛рд░реВрдк рдпрд╛ рдЕрдВрддрд┐рдо рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд░рдЦрдирд╛ (рдлрд╝рд╛рдЗрд▓ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг, рддрд╛рд░ рд▓рдЧрд╛рдирд╛ рдЖрджрд┐)
  2. рдореЗрдореЛрд░реА рдмреИрдВрдбрд╡рд┐рдбреНрде рдФрд░ рдореЗрдореЛрд░реА рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдЯ рд╕рд░рдгреА рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реИ
  3. рдмрд╛рдЗрдЯ рд╕рд░рдгреА рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕реНрдерд┐рддрд┐ рдФрд░ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛рдСрдл, рд▓рдВрдмрд╛рдИ рдЖрджрд┐ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИ

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬрдм рдЖрдк рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд╛рддреНрд░реЛрдВ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрдкрд░рдХреЗрд╕рд┐рдВрдЧ, рдЪрд╛рд░реНрдЯрд░реНрд╕ рдкрд░ рдмрдВрдЯрд╡рд╛рд░рд╛; рдпрд╣ рд╕рдордЭрдирд╛ рдХрд┐ рдЪрд░рд┐рддреНрд░ рдХреНрдпрд╛ рд╣реИ, рдмрд╛рдЗрдЯ рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдЪреМрдбрд╝рд╛рдИ рдмрди рдЬрд╛рддрд╛ рд╣реИред рдЪрд╛рд░ рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреЗрд╣рддрд░ рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИ; рдпрд╣ рд╕рдмрд╕реЗ рдЫреЛрдЯреЗ рдкрд╛рддреНрд░реЛрдВ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рджреЛрдЧреБрдирд╛ рдХрд░ рджреЗрддрд╛ рд╣реИ; рдЕрдзрд┐рдХ рд╡рд░реНрдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЪрд░ рдЪреМрдбрд╝рд╛рдИ рд╣реИред

рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдХреЗ рдирдЬрд░рд┐рдП рд╕реЗ 32 рдмрд┐рдЯ рдорд╛рди рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╕реНрдерд┐рддрд┐, рд▓рдВрдмрд╛рдИ рдФрд░ рдорд╛рдзреНрдпрдорд┐рдХ рд╡рд╕реНрддреБрдУрдВ (indexOf рдЖрджрд┐) рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред

рдореИрдВ рдХреЗрд╡рд▓ рдПрдХ рдПрдПрд╕рд╕реАрдЖрдИ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ рдПрдХ utf8 рд╕реНрдЯреНрд░рд┐рдВрдЧ "рдХреЙрдореНрдкреИрдХреНрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди" рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрддреНрд╕реБрдХ рд╣реВрдВ https://github.com/dotnet/coreclr/issues/7083; рдПрдПрд╕рд╕реАрдЖрдИ рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рддреЗрдЬреА рд╕реЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП

рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рд░ рдЙрд╕ рдЪреАрдЬрд╝ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЬрд╛ рд░рд╣рд╛ рд╣реВрдБ рдЬреЛ рдореИрдВ рд╡рд╣рд╛рдБ рдмрд╣рд╕ рдХрд░ рд░рд╣рд╛ рдерд╛ ... рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ utf8 рдХрд╛ 32 рдмрд┐рдЯ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреИрд╕рд╛ рд╣реЛрдЧрд╛? рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реНрдерд┐рддрд┐ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдореИрдк рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛; рд╡рд░реНрдгреЛрдВ рдХреА рддрд▓рд╛рд╢ рддреЗрдЬ рд╣реЛрдЧреА рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдПрд╕рд╕реАрдЖрдИ рдореЗрдВ рд╣реИ, рдЖрдЗрдЯрдо рдореВрд▓ рдЖрдХрд╛рд░ рдореЗрдВ рд╣реИрдВ рдЖрджрд┐ рдпрд╣ рдЕрдкрдиреЗ рдЖрдХрд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдЗрдЯ рдпрд╛ рдЪрд╛рд░ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рдХреИрд╕реЗ рдЦрдбрд╝рд╛ рд╣реЛрдЧрд╛?

рд╕реЗ рдФрд░ рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рдЕрдзрд┐рдХ рдорд╣рдВрдЧрд╛ рд╣реЛрдЧрд╛; рддреЛ рдпрд╣ рдПрдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЕрдзрд┐рдХ рд╣реЛрдЧрд╛; рднрдВрдбрд╛рд░рдг рдкреНрд░рд╛рд░реВрдк рдХреА рддреБрд▓рдирд╛ рдореЗрдВред

@migueldeicaza рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЙрдкрдХреНрд░рдо рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЖрдк рдХреЗрд╡рд▓ 16-рдмрд┐рдЯ рдЪрд╛рд░ рд╕реЗ 32-рдмрд┐рдЯ рддрдХ рдПрдХрд▓ рд╡рд░реНрдг рдкреНрд░рд╛рд░реВрдк рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╕рднреА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореВрд▓реНрдп рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИрдВ; рдЖрдзреЗ рдореВрд▓реНрдп рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рдмрдЬрд╛рдп - рдЖрдВрддрд░рд┐рдХ рдкреНрд░рд╛рд░реВрдк рдХреЗ рдмрдЬрд╛рдп рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ (рдпрд╛рдиреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рдВрдмрдВрдз, рдФрд░ рдорд╛рдВрдЧ рдХреА рд▓рд╛рдЧрдд, рдЖрджрд┐)

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛: рд╕реНрд╡рд┐рдлреНрдЯ рдкреВрд░реЗ рдЪрд░рд┐рддреНрд░ рдкреНрд░рд╛рд░реВрдкреЛрдВ рдореЗрдВ рднреА рдХрд╛рдо рдХрд░рддреА рд╣реИ

рд╕реНрд╡рд┐рдлреНрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рдпреВрдирд┐рдХреЛрдб рдЕрднреНрдпрд╛рд╡реЗрджрди рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпреВрдирд┐рдХреЛрдб рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдЧреНрд░реЗрдлреЗрдо рдХреНрд▓рд╕реНрдЯрд░реНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕рдХреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдХреИрд░реЗрдХреНрдЯрд░ рдорд╛рдиреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдлреЙрд░-рдЗрди рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рд╡рд░реНрдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдп рдХрд░рдирд╛ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рддреАрди рдЕрдиреНрдп рдпреВрдирд┐рдХреЛрдб-рд╕рдВрдЧрдд рдЕрднреНрдпрд╛рд╡реЗрджрди рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд╛рди рддрдХ рдкрд╣реБрдБрдЪреЗрдВ:

  • UTF-8 рдХреЛрдб рдЗрдХрд╛рдЗрдпреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ (рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА utf8 рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдкрд╣реБрдБрдЪрд╛)
  • UTF-16 рдХреЛрдб рдЗрдХрд╛рдЗрдпреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ (рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА utf16 рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдкрд╣реБрдБрдЪрд╛)
  • 21-рдмрд┐рдЯ рдпреВрдирд┐рдХреЛрдб рд╕реНрдХреЗрд▓рд░ рдорд╛рдиреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ UTF-32 рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдлреЙрд░реНрдо рдХреЗ рдмрд░рд╛рдмрд░ (рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ unicodeScalars рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ рд╕рд╛рде рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛)

рдореИрдВрдиреЗ рдЗрд╕реЗ рдореВрд▓ рдЕрдВрдХ рдореЗрдВ рдХрд╣рд╛ рдерд╛ рдФрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдХрд╣реВрдВрдЧрд╛ред рдПрдХ рдорд╛рдирдХ рдЬреЛ рдХрд╣рддрд╛ рд╣реИ рдЙрд╕реЗ рдЫреЛрдбрд╝ рджреЗрдирд╛ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рднреНрд░рдорд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдФрд░, рдпреВрдирд┐рдХреЛрдб рдореЗрдВ рдПрдХ рд░реВрдг рдХреЛрдб рдкреГрд╖реНрда рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рднреНрд░рдорд┐рдд рдХрд░рддрд╛ рд╣реИред

рдирд╛рдо рдЧрд▓рдд рд╣реИред

@ рдореЗрд▓рд┐рдиреЛрдИ

рд░реВрдг рдХрдИ рд╕рдВрдЪрд╛рд▓рди рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ рдЬреЛ рдЖрдЬ рдЖрдк рдЪрд╛рд░ рдкрд░ рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ ToLower[Invariant], ToUpper[Invariant], ToTitle, IsDigit, IsAlpha, IsGraphic, IsSymbol, IsControlред

рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдпрд╣ рдЪреАрдЬреЗрдВ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ рдЬреИрд╕реЗ:

  • EncodeRune (рдПрдХ рд░рди рдХреЛ рдмрд╛рдЗрдЯ рдмрдлрд░ рдореЗрдВ рдПрдиреНрдХреЛрдб рдХрд░рддрд╛ рд╣реИ)
  • RuneUtf8Len (UTF8 рдореЗрдВ рд░реВрдг рдХреЛ рдПрдиреНрдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рджреЗрддрд╛ рд╣реИ),
  • IsValid (рд╕рднреА Int32 рдорд╛рди рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИрдВ)

рдФрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдФрд░ Utf8string рдореЗрдВ рдЗрдВрдЯрд░рдСрдк рдХрд░реЗрдВред

рдореИрдВрдиреЗ рдЧреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рдорд░реНрдерди рдХреЛ .NET рдореЗрдВ рдкреЛрд░реНрдЯ/рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛, рдФрд░ рдпрд╣ рдПрдХ рджреГрд╢реНрдп рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рджреБрдирд┐рдпрд╛ рдХреИрд╕реА рджрд┐рдЦреЗрдЧреА (рдпрд╣ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд░рдирдЯрд╛рдЗрдо рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд╣реИ):

https://github.com/migueldeicaza/NStack/tree/master/NStack/unicode

@benaadams рдиреЗ рдХрд╣рд╛:

рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ utf8 рдХрд╛ 32 рдмрд┐рдЯ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреИрд╕рд╛ рд╣реЛрдЧрд╛? рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реНрдерд┐рддрд┐ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдореИрдк рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛; рд╡рд░реНрдгреЛрдВ рдХреА рддрд▓рд╛рд╢ рддреЗрдЬ рд╣реЛрдЧреА рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдПрд╕рд╕реАрдЖрдИ рдореЗрдВ рд╣реИ, рдЖрдЗрдЯрдо рдореВрд▓ рдЖрдХрд╛рд░ рдореЗрдВ рд╣реИрдВ рдЖрджрд┐ рдпрд╣ рдЕрдкрдиреЗ рдЖрдХрд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдЗрдЯ рдпрд╛ рдЪрд╛рд░ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рдХреИрд╕реЗ рдЦрдбрд╝рд╛ рд╣реЛрдЧрд╛?

UTF8 рдПрдХ рдЗрди-рдореЗрдореЛрд░реА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реИ, рдЬреЛ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рд░рд╣реЗрдЧрд╛ рдФрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдмрдирд╛ рд░рд╣реЗрдЧрд╛ (рдФрд░ рдЙрдореНрдореАрдж рд╣реИ, рдпрд╣ .NET рдореЗрдВ рднрд╡рд┐рд╖реНрдп рдХреЗ рддрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рдЖрдВрддрд░рд┐рдХ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╣реИ)ред

рдЖрдк рдореМрдЬреВрджрд╛ UTF16 рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ (System.String) рдпрд╛ рдЖрдЧрд╛рдореА UTF8 рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ (Utf8String) рдХреЛ рд╡рд░реНрдгреЛрдВ рдореЗрдВ рдирд╣реАрдВ (рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ рдХрд┐ рдЖрдк рдФрд░ рдореИрдВ рджреЛрдиреЛрдВ рд╕рд╣рдордд рд╣реИрдВ), рд▓реЗрдХрд┐рди рд░реВрдиреНрд╕ рдореЗрдВ рдбреАрдХреЛрдб рдХрд░реЗрдВрдЧреЗред

рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг, Utf8 рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рд░рдиреЛрдВ рдореЗрдВ рдмрджрд▓реЗрдВ:

https://github.com/migueldeicaza/NStack/blob/6a071ca5c026ca71c10ead4f7232e2fa0673baf9/NStack/strings/ustring.cs#L756

рдХреНрдпрд╛ utf8 рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдПрдХ рд░реВрдг рд╣реЛрддрд╛ рд╣реИ:

https://github.com/migueldeicaza/NStack/blob/6a071ca5c026ca71c10ead4f7232e2fa0673baf9/NStack/strings/ustring.cs#L855

рдореИрдВрдиреЗ рдЕрднреА рджреЗрдЦрд╛ рдХрд┐ рдореИрдВрдиреЗ рдЗрдВрдбреЗрдХреНрд╕рд░ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ ("рдореБрдЭреЗ рдПрди-рд╡реЗрдВ рд░рди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ")

рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ Nth-rune рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЧрддрд┐ рднрдВрдбрд╛рд░рдг рдХрд╛ рдПрдХ рдХрд╛рд░реНрдп рд╣реИ, рди рдХрд┐ рд░реВрдг рдХрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХрд╛ рд╕рдВрдЧреНрд░рд╣рдг UTF32 рд╣реИ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреНрд░рддреНрдпреЗрдХ рд░рди рддрдХ рд╕реАрдзреА рдкрд╣реБрдВрдЪ рд╣реИред рдпрд╣ рдЕрдХрд╛рджрдорд┐рдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рднреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред UTF16 рдФрд░ UTF8 рдкрд░ Nth рддрддреНрд╡ рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╕реАрдорд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ (рдмрд╛рдЗрдЯреНрд╕ рдпрд╛ 16-рдмрд┐рдЯ рдЗрдирдЯреНрд╕) рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рддрддреНрд╡реЛрдВ рдХреА рдЙрдЪрд┐рдд рд╕реНрдХреИрдирд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред String[int n] { get; } рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рд╣реЛрдиреЗ рдХреА рдирд╣реАрдВ, рдЬреЛ рд╢реБрджреНрдзрддрд╛ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рд╕рд┐рд░реНрдл n-рд╡реЗрдВ рд╡рд░реНрдг рд▓реМрдЯрд╛рддрд╛ рд╣реИред

@benaadams рд╕реНрд╡рд┐рдлреНрдЯ рдХреИрд░реЗрдХреНрдЯрд░ рдПрдХ рд░рди рд╕реЗ рдКрдкрд░ рдХрд╛ рд╕реНрддрд░ рд╣реИред рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ рд╡рд░реНрдг "рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдЧреНрд░реЗрдлреЗрдо рдХреНрд▓рд╕реНрдЯрд░" рд╣реИрдВ рдЬреЛ рдПрдХ рдпрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд░рдиреЛрдВ рд╕реЗ рдмрдиреЗ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрдм рд╡реЗ рд╕рдВрдпреБрдХреНрдд рд╣реЛрддреЗ рд╣реИрдВ рддреЛ рдорд╛рдирд╡ рдкрдардиреАрдп рдЪрд░рд┐рддреНрд░ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред

рддреЛ рд╕реНрд╡рд┐рдлреНрдЯ рдЪрд░рд┐рддреНрд░ рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд 32-рдмрд┐рдЯ рдЖрдХрд╛рд░ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдЪрд░ рд▓рдВрдмрд╛рдИ рд╣реИ (рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╣ рдирд┐рд░реНрдорд╛рдг рднреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рд╣реИ)ред рдпрд╣рд╛рдВ рдЙрд╕ рдкреГрд╖реНрда рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрдореЛрдЬреА рдХреЗ рд░рдВрдЧ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╣реИ:

рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдЕрдХреНрд╖рд░ ├й рдХреЛ рдПрдХрд▓ рдпреВрдирд┐рдХреЛрдб рд╕реНрдХреЗрд▓рд░ ├й рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (ACUTE рдХреЗ рд╕рд╛рде рд▓реИрдЯрд┐рди рдЫреЛрдЯрд╛ рдЕрдХреНрд╖рд░ E, рдпрд╛ U+00E9)ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рд╣реА рдЕрдХреНрд╖рд░ рдХреЛ рд╕реНрдХреЗрд▓рд░реНрд╕ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдХреЗ рд░реВрдк рдореЗрдВ рднреА рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ-рдПрдХ рдорд╛рдирдХ рдЕрдХреНрд╖рд░ рдИ (рд▓реИрдЯрд┐рди рдЫреЛрдЯрд╛ рдкрддреНрд░ рдИ, рдпрд╛ рдпреВ+0065), рдЙрд╕рдХреЗ рдмрд╛рдж рд╕рдВрдпреЛрдЬрди рдПрдХреНрдпреВрдЯ рдПрдХреНрд╕реЗрдВрдЯ рд╕реНрдХреЗрд▓рд░ (рдпреВ+0301)ред рд╕рдВрдпреЛрдЬрди рдПрдХреНрдпреВрдЯ рдПрдХреНрд╕реЗрдВрдЯ рд╕реНрдХреЗрд▓рд░ рдХреЛ рдЧреНрд░рд╛рдлрд┐рдХ рд░реВрдк рд╕реЗ рдЙрд╕ рд╕реНрдХреЗрд▓рд░ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рд╣реЛрддрд╛ рд╣реИ, рдПрдХ рдИ рдХреЛ рдПрдХ ├й рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ рдЬрдм рдЗрд╕реЗ рдпреВрдирд┐рдХреЛрдб-рдЬрд╛рдЧрд░реВрдХ рдЯреЗрдХреНрд╕реНрдЯ-рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕рд┐рд░реНрдл рдореЗрд░реЗ рд▓рд┐рдП grapheme рд╢рдмреНрдж рдЕрдзрд┐рдХ рдЖрддреНрдо-рд╡рд░реНрдгрди рд╣реЛрдЧрд╛ред

рдирд╛рдо рдкрд░ рдореЗрд░реЗ рджреЛ рд╕реЗрдВрдЯ, рдЬреЛрд░ рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдкрд░ рдЧреЛ рдкреЛрд╕реНрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЙрджреНрдзреГрдд рдХрд░рддреЗ рд╣реБрдП:

" рдХреЛрдб рдмрд┐рдВрджреБ " рдПрдХ рдХреМрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЧреЛ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рд╢рдмреНрдж рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИ: рд░реВрдгред рдпрд╣ рд╢рдмреНрдж рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдЕрд░реНрде рдмрд┐рд▓реНрдХреБрд▓ "рдХреЛрдб рдмрд┐рдВрджреБ" рдЬреИрд╕рд╛ рд╣реА рд╣реИ , рдЬрд┐рд╕рдореЗрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдЬреЛрдбрд╝ рд╣реИред

рдореИрдВ @blowdart рд╕реЗ 100% рд╕рд╣рдордд рд╣реВрдВ, рдЗрд╕реЗ рд░реВрдг рдХрд╣рдирд╛ рд╕рд┐рд░реНрдл рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдФрд░ рдЧрд▓рдд рд╣реИред рдпреВрдирд┐рдХреЛрдб рдорд╛рдирдХ рдЙрд▓реНрд▓реЗрдЦ рдХреЛрдб рдХреЗрд╡рд▓ рдкрд░рд┐рдЪрдп рдЕрдзреНрдпрд╛рдп рдХреЗ рдкрд╣рд▓реЗ рдкреГрд╖реНрда рдореЗрдВ рддреАрди рдмрд╛рд░ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд░реВрдг рд╢рдмреНрдж рдХрд╣реАрдВ рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред

рдпрджрд┐ рдпрд╣ рдПрдХ рдХреЛрдб рдмрд┐рдВрджреБ рд╣реИ, рддреЛ рдЗрд╕реЗ рдХреЛрдб рдмрд┐рдВрджреБ рдирд╛рдо рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╣ рдЙрддрдирд╛ рд╣реА рд╕рд░рд▓ рд╣реИред

рдпрджрд┐ рд░реВрдг рд╢рдмреНрдж рдорд╛рдирдХ рдореЗрдВ рдХрднреА рдкреНрд░рдХрдЯ рдирд╣реАрдВ рд╣реБрдЖ, рддреЛ рдпрд╣ рдареАрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд░рдиреЛрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЕрдзреНрдпрд╛рдп 8 рдореЗрдВ рдХрдИ рдмрд╛рд░ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рдЧрд▓рдд рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдорд╛рдорд▓реЗ рдХреЛ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред

рд╕рд┐рд░реНрдл рдореЗрд░реЗ рд▓рд┐рдП grapheme рд╢рдмреНрдж рдЕрдзрд┐рдХ рдЖрддреНрдо-рд╡рд░реНрдгрди рд╣реЛрдЧрд╛ред

рдпрджрд┐ рдпрд╣ рд▓рдЧрднрдЧ 32-рдмрд┐рдЯ рдХреЛрдб-рдкреЙрдЗрдВрдЯ рд╣реИ рддреЛ grapheme рд╢рдмреНрдж рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдЧреНрд░реЗрдлреЗрдо рдлрд┐рд░ рд╕реЗ рдХреБрдЫ рдФрд░ рд╣реИред

рдореИрдВ рдЕрдХреНрд╕рд░ рдПрдХ рдХреЛрдб-рдкреЙрдЗрдВрдЯ рдбреЗрдЯрд╛рдЯрд╛рдЗрдк рдЪрд╛рд╣рддрд╛ рдерд╛ (рдЕрдЪреНрдЫреЗ рд╕рдордп рдореЗрдВ рдирд╣реАрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЬрд┐рд╕ рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ рд╡рд╣ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдореИрдВ рдЗрд╕реЗ рдмрд╣реБрдд рдХреБрдЫ рдЪрд╛рд╣рддрд╛ рдерд╛ рдФрд░ рдЙрд╕ рдЬрд╝рд░реВрд░рдд рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд╡реНрдпрд╛рдкреА рдЖрдВрд╢рд┐рдХ рд╕рдорд╛рдзрд╛рди рд▓рд┐рдЦрд╛ рдерд╛ рдФрд░ рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░реАрдХреНрд╖рд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛)ред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕реЗ CodePoint рдЬреИрд╕рд╛ рдХреБрдЫ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧ рдЬреЛ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╡реЗ рд╡реИрд╕реЗ рднреА рдХреЛрдб-рдкреЙрдЗрдВрдЯреНрд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕реЛрдЪ рд░рд╣реЗ рд╣реЛрдВрдЧреЗ, рди рдХрд┐ рд░рдиреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ; рдпрд╛ рдлрд┐рд░ рдХреЛрдб-рдкреЙрдЗрдВрдЯреНрд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдФрд░ рдЙрдирдХреЗ рдХрд╛рд░реНрдп рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИред /r├║na b├йo├╛ рд╕реНрдЯрд┐рд▓ рдмреНрд░рд╛рдЗрд╕реВ/рд░реВрдиреНрд╕ рдЕрднреА рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдореБрдЭреЗ рд╕рд╛рд▓ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рд░рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ, рдФрд░ рдЖрдо рддреМрд░ рдкрд░ рдЪрд░реНрдордкрддреНрд░ рдФрд░ рд╕реНрдпрд╛рд╣реА рдХреЗ рд╕рд╛рде рдбрд┐рдЬрд┐рдЯрд▓ рдХреБрдЫ рднреА рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдРрд╕реЗ рд▓реЛрдЧ рд╣реИрдВ рдЬреЛ рдбрд┐рдЬрд┐рдЯрд▓ рд░реВрдк рд╕реЗ рднреА рдЙрдирд╕реЗ рдирд┐рдкрдЯрддреЗ рд╣реИрдВред (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ 20рд╡реАрдВ рд╕рджреА рдХреЗ рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рд╕рд╛рде, рдореБрдЭреЗ рдПрдХ рдРрд╕реЗ рдорд╛рдорд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╕реЗ рд╡реЗ WWII-рдпреБрдЧ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдореЗрдВ рд╣реИрдВ)ред

рдЧреНрд░реИрдлреЗрдо рдЕрднреА рднреА рдкреЗрдЪреАрджрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рдЕрдХреНрд╕рд░ рдСрдХреНрдЯреЗрдЯ тЖТ рд╡рд░реНрдг (рдкрд╣рд▓реЗ рд╕реЗ рд╣реА .NET рджреНрд╡рд╛рд░рд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдЬрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдлрд┐рд░ рд╡рд░реНрдг тЖТ рдХреЛрдб-рдкреЙрдЗрдВрдЯ, рдФрд░ рдлрд┐рд░ рдХреЛрдб-рдкреЙрдЗрдВрдЯреНрд╕ тЖТ рдЧреНрд░реЗрдлреЗрдореНрд╕ред

рдЗрд╕реЗ рдЕрднреА рдХреЗ рд▓рд┐рдП рдЕрдк-рдлреЙрд░-рдЧреНрд░реИрдмреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдлрд╝реНрд▓реИрдЧ рдХрд░рдирд╛ред

рдЕрдЧрд▓реЗ рдЪрд░рдг : рд╣рдо рдЬреЛ рдЦреЛрдЬ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рд╣реИ: рдПрдХ рдФрдкрдЪрд╛рд░рд┐рдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдЬрд┐рд╕рдореЗрдВ рдКрдкрд░ рд╕реЗ рдлреАрдбрдмреИрдХ рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧрд╛ (рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдирд╛рдордХрд░рдг, рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдлрд╛рдпрджреЗ рдХреЗрд╡рд▓ рдПрдХ рдЗрдВрдЯ 32 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдкрд░реАрдд)ред

рдореИрдВрдиреЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдПрдкреАрдЖрдИ рдФрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рд╣реИ:

https://github.com/migueldeicaza/NStack/blob/master/NStack/unicode/Rune.cs

рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдкреНрд░рдХрд╛рд░ рдХреЗ рдирд╛рдордХрд░рдг рдХрд╛ рд╕рд╡рд╛рд▓ рд╣реИ, рдпрд╣ рдПрдХ рдРрд╕реА рдЬрдЧрд╣ рд╣реЛрдиреЗ рдХреА рдмрд╛рдд рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдкреНрд░рдХрд╛рд░ рдкрд░ рд╡реИрдз рд╕рдВрдЪрд╛рд▓рди рдХреА рддрд▓рд╛рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдкреНрд░рдХрд╛рд░-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреНрд╖рдорддрд╛рдПрдВ (рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреЗрдЦреЗрдВ)ред

@migueldeicaza рдЗрд╕реЗ рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдлрд╝реНрд▓реИрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдирд╛рдордХрд░рдг рдкрд░ рдЪрд┐рдВрддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреЗ рдХреНрдпрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ, рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╢рд╛рдпрдж рдХреЛрдбрдкреЙрдЗрдВрдЯ рдпрд╣ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдмреЗрд╣рддрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдХреЛрдбрдкреЙрдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рддрд░реНрдХ рдХрдордЬреЛрд░ рд╣реИред

рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рднрдпрд╛рдирдХ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рд▓рдВрдмреА рдЕрд╡рдзрд┐ рдореЗрдВ, рдЗрд╕реЗ рдореМрдЬреВрджрд╛ рдХреЛрдб рдореЗрдВ "рдЪрд╛рд░" рдХреЗ рд╣рд░ рдПрдХ рдЙрдкрдпреЛрдЧ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ - рдЕрдЧрд░ рд╣рдо рдЙрдЪрд┐рдд рдпреВрдирд┐рдХреЛрдб рд╕рдорд░реНрдерди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВред

рдХрд╛рд╢ рд╣рдо рд░рд╕реНрдЯ рдХреА рддрд░рд╣ "рдЪрд╛рд░" рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рдереЗ, рд▓реЗрдХрд┐рди рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рд╣рдордиреЗ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╣реА рд▓реЗ рд▓рд┐рдпрд╛ рд╣реИ рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЯреВрдЯрд╛ рд╣реБрдЖ рд╣реИред

рдЗрд╕ рдирд╛рдо рдХреЛ рдЕрдкрдирд╛рдирд╛ рдПрдХ рдЕрдЪреНрдЫреА рдорд┐рд╕рд╛рд▓ рд╣реИред

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ code point рдпрд╣рд╛рдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╢рдмреНрдж рдирд╣реАрдВ рд╣реИред рдХрдо рд╕реЗ рдХрдо, рдпреВрдирд┐рдХреЛрдб рдорд╛рдирдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрд╕рдореЗрдВ 10FFFF (http://unicode.org/glossary/#code_point) рд╕реЗ рдКрдкрд░ рдХреЗ рдорд╛рди рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВред

рдореБрдЭреЗ rune рд╢рдмреНрдж рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпреВрдирд┐рдХреЛрдб рдФрд░ рдЕрдиреНрдп рдЬрдЧрд╣реЛрдВ рдкрд░ рдЗрд╕рдХрд╛ рдореМрдЬреВрджрд╛ рдЙрдкрдпреЛрдЧ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рд╕рдордЧреНрд░ рд░реВрдк рд╕реЗ рднреНрд░рдо рдкреИрджрд╛ рдХрд░реЗрдЧрд╛ред рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореМрдЬреВрджрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рд░реЛрдз рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдореМрдХрд╛ рд╣реИ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХрддрд╛ рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП, рдЬрд╣рд╛рдВ 'рд░реВрдг' рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЧреЗрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░ рд╕рдХрддрд╛ рд╣реИ)ред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИ рдЬреЛ рд╕реА ++ 11 char32_t рдкреНрд░рдХрд╛рд░ рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИ, рдмрд╕ рдПрдХ рдЕрд▓рдЧ рдирд╛рдо рдХреЗ рд╕рд╛рдеред

Char32 рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХрд╣рд╛ рдЬрд╛рдирд╛ рд╣реИред рдпрд╣ рдмрд┐рдВрджреБ рдкрд░ рд╣реИ, рдпрд╣ рдЕрднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд╛рдореЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реИред рдпрд╣ рдХреЛрдб-рдмрд┐рдВрджреБ рд╕реНрддрд░ рдХреЗ рдмрдЬрд╛рдп рдЪрд░рд┐рддреНрд░ рд╡реИрдЪрд╛рд░рд┐рдХ рд╕реНрддрд░ рдкрд░ рдмрд╛рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХрд┐рд╕реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдирд╛рдо рдирд╣реАрдВ рд╣реИред

рдЪреВрдВрдХрд┐ рд╣рдо nint рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ nchar $ рдХреИрд╕реЗ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ?

рдорд┐рд╕рд╛рд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╣реЛрдЧреА nchar рдФрд░ nvarchar

рдЬрд╣рд╛рдВ nchar рд░рд╛рд╖реНрдЯреНрд░реАрдп рдЪрд╛рд░/рд░рд╛рд╖реНрдЯреНрд░реАрдп рдЪрд░рд┐рддреНрд░ рд╣реИрдВ рдФрд░ nvarchar рд░рд╛рд╖реНрдЯреНрд░реАрдп рдЪрд╛рд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ/рд░рд╛рд╖реНрдЯреНрд░реАрдп рдЪрд░рд┐рддреНрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВ; рд╡реЗ рдХреМрди рд╕реЗ рдлрд╝реАрд▓реНрдб рдкреНрд░рдХрд╛рд░ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдЖрдк рдпреВрдирд┐рдХреЛрдб рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреБрдЫ рдЖрдИрдПрд╕рдУ рдорд╛рдирдХ рднреА - рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛, рд╢рд╛рдпрдж рдПрд╕рдХреНрдпреВрдПрд▓?

рд░реВрдг рдХрд╛ рдпрд╣ рдпреВрдирд┐рдХреЛрдб рдЙрдкрдпреЛрдЧ рдХреНрдпрд╛ рд╣реИ? рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣реА рдЦрдмрд░ рд╣реИред

рдпреВ+16рдП0 рд╕реЗ рдпреВ+16рдПрдл8

рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдпреВрдирд┐рдХреЛрдб рдорд╛рдирдХ рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЛрдб рдкреГрд╖реНрда рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ рдХрдИ рдмрд╛рд░ рд▓рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ: http://unicode.org/charts/PDF/U16A0.pdf

рдЖрд╣ рд░реВрдирд┐рдХ, рд░реВрдг рдирд╣реАрдВред

рдмреИрдХрд┐рдВрдЧ рдирд╛рдо (System.Rune рдпрд╛ System.Char32) рдЙрддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдирд╛ рдХрд┐ рд▓реЗрдмрд▓ рдЬрд┐рд╕реЗ C# рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ: рд╣рд╛рдБ, рд╣рд╛рдБ, рдФрд░ рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рдХреГрдкрдпрд╛ред рдореБрдЭреЗ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИ (рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рдорд╛рди рд╡рд┐рдЪрд╛рд░ рд╣реИ рдЬреЛ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЪрд▓ рд░рд╣рд╛ рд╣реИ)ред рдЕрд╕рд▓ рдореЗрдВ рд╣рдо рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдмрд╛рдж рдореЗрдВ рд╣рдорд╛рд░реА рдЧрд┐рдЯ рд╕рдВрдЧрддрддрд╛ рдореЗрдВ рдПрдХ рдХрд╕реНрдЯрдо рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреНрд▓рд╛рд╕ рдФрд░ рдХреИрд░реЗрдХреНрдЯрд░ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рдЧрд┐рдЯ рдпреВрдЯреАрдПрдл -8 рдореЗрдВ рдмреЛрд▓рддрд╛ рд╣реИ рдФрд░ рд╕рдм рдХреБрдЫ рдЯреНрд░рд╛рдВрд╕рдХреЛрдбрд┐рдВрдЧ рдмрд╣реБрдд рдзреАрдорд╛ рд╣реИ)ред

рд╕реНрдереИрддрд┐рдХ рд╡рд┐рдзрд┐ рдирд╛рдореЛрдВ рдХреЗ рд╡рд┐рд╖рдп рдкрд░, рдХреНрдпрд╛ рд╣рдо рдХреГрдкрдпрд╛ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рд▓рдШреБ-рдирд╛рдордХрд░рдг рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВ? рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ Char.IsPunctuation рд╡рд░реНрддрдорд╛рди рд╡рд┐рдзрд┐ рд╣реИ, рдХреНрдпрд╛ рд╣рдо рдХреГрдкрдпрд╛ рдЗрд╕реЗ Rune.IsPunctuation рдпрд╛ рдЗрд╕реА рддрд░рд╣ рдХреЗ рд╕рд╛рде рдорд┐рд░рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП (рд╣рдореЗрд╢рд╛ рдЦрддрд░рдирд╛рдХ) рдХрд┐ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЖрдВрддрд░рд┐рдХ rune рдпрд╛ c32 рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ char рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ System.Rune рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ?

рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ unichar рдпрд╛ uchar рд╣рд╛рд▓рд╛рдВрдХрд┐ uchar рдпрд╣ рдПрдХ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЪрд╛рд░ рдХреА рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬреЛ рднреА рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рднрд╛рд╖рд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдирд╛рдо рдорд┐рд▓реЗрдЧрд╛ред рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рдЙрдкрдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдкреНрд░рд╢рдВрд╕рдХ рд╣реВрдВред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореИрдВ @whoisj рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ - рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд/рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдкреЛрдВ рдкрд░ рдкреВрд░реНрдг рд╡рд┐рдзрд┐ рдирд╛рдо рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореИрдВ @whoisj рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ - рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд/рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдкреЛрдВ рдкрд░ рдкреВрд░реНрдг рд╡рд┐рдзрд┐ рдирд╛рдо рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред

рдЖрдИрдПрдордУ рдПрдХ рднрд╛рд╖рд╛ (рдФрд░ рдЗрд╕рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ) рдХреЛ рдпрд╛ рддреЛ рдкреВрд░реНрдг, рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо рдЪреБрдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдпрд╛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреВрд░реЗ рд╣реЙрдЧ рдкрд░ рдЬрд╛рдПрдВ (рдЬреИрд╕реЗ рд╕реА strcmp, memcpy, рдЖрджрд┐ рдХреЗ рд╕рд╛рде)

рдпрд╛ рд╕рд┐рд░реНрдл char рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ System.Rune рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдмрджрд▓ рджреЗрдВ?

рдпрд╣ рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрджрд▓рд╛рд╡ рд╣реЛрдЧрд╛ред

рдпрд╣ рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрджрд▓рд╛рд╡ рд╣реЛрдЧрд╛ред

рдореЗрд░реА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдЬреНрдпрд╛рджрд╛рддрд░ рдЬреБрдмрд╛рди рдФрд░ рдЧрд╛рд▓, рдФрд░ рдЖрд╢рд╛рдиреНрд╡рд┐рдд рдереАрдВред рдЪрд░рд┐рддреНрд░ рдХреЗ рд▓рд┐рдП 16-рдмрд┐рдЯ рдкреНрд░рдХрд╛рд░ рд╢реБрд░реВ рд╕реЗ рд╣реА рдПрдХ рдЧрд▓рддреА рдереАред

рдирд╛рдордХрд░рдг рдкрд░ рдЕрдЪреНрдЫреА рдкрдХрдбрд╝, рдареАрдХ рд╣реЛ рдЬрд╛рдПрдЧреАред

рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдПрдкреАрдЖрдИ рдореЗрдВ рдЕрдиреНрдп рдЫреЛрдЯреА рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдВ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рднреА рдареАрдХ рдХрд░рдиреЗ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдЧрд╛ред

@migueldeicaza

рдЖрд╣ рд░реВрдирд┐рдХ, рд░реВрдг рдирд╣реАрдВред

рд░реВрдирд┐рдХ рд╡рд┐рд╢реЗрд╖рдг рд╣реИ, рд░реВрдг рд╕рдВрдЬреНрдЮрд╛ред рд╕рднреА рд░рдирд┐рдХ рдХреИрд░реЗрдХреНрдЯрд░ рд░рди рд╣реИрдВред

_Runic_ рд╡рд┐рд╢реЗрд╖рдг рд╣реИ, _rune_ рд╕рдВрдЬреНрдЮрд╛ред рд╕рднреА рд░рдирд┐рдХ рдХреИрд░реЗрдХреНрдЯрд░ рд░рди рд╣реИрдВред

рдореЗрд▓рд╛ рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ "Cortana: _'rune'_ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ" рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ:

рд░реЛрдорди рд╡рд░реНрдгрдорд╛рд▓рд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдПрдХ рдкреНрд░рд╛рдЪреАрди рдЬрд░реНрдордирд┐рдХ рд╡рд░реНрдгрдорд╛рд▓рд╛ рдХрд╛ рдПрдХ рдЕрдХреНрд╖рд░ред

рдЖрд╣ рд╣рд╛рдБ, рдЬрдм рднреА рдореИрдВ "рд░реВрди" рд╢рдмреНрдж рджреЗрдЦрддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рддреБрд░рдВрдд рдЗрд╕ рдЕрд╕реНрдкрд╖реНрдЯ рдЕрдзреНрдпрд╛рдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВ рдЬреЛ рдХрд┐рд╕реА рдиреЗ рдирд╣реАрдВ рдкрдврд╝рд╛ рд╣реИ рдЬреЛ "рдж рд░реВрдирд┐рдХ рдпреВрдирд┐рдХреЛрдб рдмреНрд▓реЙрдХ" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдмрдЪрдкрди рдХреА рдпрд╛рджреЛрдВ рдХреЛ рдЯреЙрд▓реНрдХрд┐рди рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВред

рдореИрдВ

рд╣рд╛рдБ, рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрд▓реНрдкрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрддрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд╛рддреНрд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВ рдЬреЛ рдХрд▓реНрдкрдирд╛ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред

рдЖрдк rune рдХрд╣рддреЗ рд╣реИрдВ рдФрд░ рдореИрдВ рдЬрд╛рджреВ, рдХрд▓реНрдкрдирд╛, рдЧреБрдкреНрдд рдкрд╣реЗрд▓реА, рдкреНрд░рд╛рдЪреАрди рднрд╛рд╖рд╛ рдЖрджрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВред

рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдЖрдк "рд░рди" рд╢рдмреНрдж рдирд╣реАрдВ рджреЗрдЦрддреЗ рд╣реИрдВ рдФрд░ рддреБрд░рдВрдд рд╕реЛрдЪрддреЗ рд╣реИрдВ "рдЖрд╣ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпреВрдирд┐рдХреЛрдб 7.0 рд░рдирд┐рдХ рдмреНрд▓реЙрдХ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореВрд▓реНрдп 16A0..16F8 рдХреА рд╕реАрдорд╛ рдореЗрдВ рдЙрди рдЕрджреНрд╡рд┐рддреАрдп рдорд╛рдиреЛрдВ рддрдХ рд╕реАрдорд┐рдд рд╣реЛрдЧрд╛"ред

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЯрд╛рдиреНрдирд░ рдпрд╣рд╛рдВ рдПрдХ рд╣реА рдЖрд╡рд╛рдЬ рд╣реИ, рдФрд░ рдЖрдк рдореЗрдВ рд╕реЗ рдХреБрдЫ рдЕрднреА рднреА рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ "рд▓реЗрдХрд┐рди рдорд┐рдЧреБрдПрд▓, рдореБрдЭреЗ 'рд░реВрдг' рд╢рдмреНрдж рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдФрд░ рдореИрдВ рддреБрд░рдВрдд рдПрдХ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВ рдЬреЛ рдХрднреА рднреА рдХреЗрд╡рд▓ 88 рд╕рдВрднрд╛рд╡рд┐рдд рдорд╛рди рд░рдЦ рд╕рдХрддрд╛ рд╣реИ"ред рдЕрдЧрд░ рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдЖрдк рдЬреВрдЭ рд░рд╣реЗ рд╣реИрдВ, рдореЗрд░реЗ рднрд╛рдИ/рдмрд╣рди, рдореЗрд░реЗ рдкрд╛рд╕ рдЖрдкрдХреЗ рд▓рд┐рдП рдЦрдмрд░ рд╣реИ: рдЖрдкрдХреЗ рдкрд╛рд╕ рддрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдбрд╝реА рдордЫрд▓реА рд╣реИред

рдореИрдВ рдЗрд╕ рдзрд╛рдЧреЗ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХреБрдЫ рд╕рдордп рд╕реЗ рдЙрддреНрд╕рд╛рд╣ рдФрд░ рдЭрд┐рдЭрдХ рдХреЗ рдорд┐рд╢реНрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдорд╣реАрдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд╕реЗ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рдорд╣реАрдиреЗ рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг рдФрд░ рдпреВрдирд┐рдХреЛрдб рд╕рдореНрдореЗрд▓рди рдореЗрдВ рднрд╛рдЧ рд▓рд┐рдпрд╛, рдФрд░ рдХрд┐рд╕реА рднреА рдкреНрд░рд╕реНрддреБрддреАрдХрд░рдг рдореЗрдВ .NET рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рдерд╛ред .NET Framework рдХреЗ рд╕рд╛рде рдПрдХ рдзрд╛рд░рдгрд╛ рд╕рдорд╕реНрдпрд╛ рд╣реИ; рдПрдХ рдЬреЛ рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рдЗрд╕рдХреЗ рд╡реИрд╢реНрд╡реАрдХрд░рдг рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдЗрддрд┐рд╣рд╛рд╕ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдЕрдирд░реНрдЬрд┐рдд рд╣реЛред рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдореБрдЭреЗ C# рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкрд╕рдВрдж рд╣реИ рдФрд░ рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдореБрджрд╛рдп рдореЗрдВ .NET рдХреА рдЬрдЧрд╣ рдХреЛ рдордЬрдмреВрдд рдХрд░рддреА рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдЙрди рдорд╛рдирдХреЛрдВ рдХреЛ рдЕрдкрдирд╛рдиреЗ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрджрдо рд╣реИ рдЬреЛ рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг рд╕рдореБрджрд╛рдп рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред

рдореЗрд░реА рдЭрд┐рдЭрдХ рдЬреНрдпрд╛рджрд╛рддрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордирдореБрдЯрд╛рд╡ рдкрд░ рд░рд╣реА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕рдЪ рд╣реИ рдХрд┐ рдЧреЛ рдХреЗ рдбрд┐рдЬрд╛рдЗрдирд░реЛрдВ рдиреЗ "рд░реВрди" рдирд╛рдо рдЪреБрдирд╛ рд╣реИ, рдпрд╣ рдмрд╛рд░-рдмрд╛рд░ рдКрдкрд░ рд╕реВрдЪреАрдмрджреНрдз рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИ: рдРрд╕реЗ рдХреЛрдб рдмрд┐рдВрджреБ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдареАрдХ рд╕реЗ рд░рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдРрд╕реЗ рдкреНрд░рд╕реНрддрд╛рд╡ рд╕реЗ рд╕рд╣рдордд рд╣реЛрдирд╛ рдХрдард┐рди рд╣реИ рдЬреЛ рдПрдХ рд╕рдореНрдорд╛рдирд┐рдд рдорд╛рдирдХ рдХреЗ рдХрд░реАрдм рдЖрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЙрд╕ рд╢рдмреНрджрд╛рд╡рд▓реА рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рддрд░реНрдХ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЗрд╕ рд╢рдмреНрдж рд╕реЗ рдЕрдирднрд┐рдЬреНрдЮ рд╣реИрдВ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдпреВрдирд┐рдХреЛрдб рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдФрд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "рд░рди" рдХреНрдпрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд╢рдмреНрджрд╛рд╡рд▓реА рдХреЛ рдорд┐рд╢реНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЙрд╕ рд╡рд┐рд╖рдорддрд╛ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдЬреЛ рдореМрдЬреВрдж рд╣реЛ рд╕рдХрддреА рд╣реИ:

Rune.IsRune(new Rune('сЫБ')); // evaluates to true
Rune.IsRune(new Rune('I')); // evaluates to false

рдмреЗрд╢рдХ, рдореИрдВрдиреЗ рдХреЛрдИ рдирдпрд╛ рдирд╛рдо рджрд┐рдП рдмрд┐рдирд╛ рдЖрд▓реЛрдЪрдирд╛ рдХрд░рддреЗ рд╣реБрдП рдпрд╣рд╛рдВ рдЖрд╕рд╛рди рд░рд╛рд╕реНрддрд╛ рдЕрдкрдирд╛рдпрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ CodePoint рдХрд╛ рдкрд┐рдЫрд▓рд╛ рд╕реБрдЭрд╛рд╡ рд╕рдмрд╕реЗ рдЖрддреНрдо-рд╡рд░реНрдгрдирд╛рддреНрдордХ рд╡рд┐рдХрд▓реНрдк рд╣реИ (рдФрд░ рдпрд╣ рдореВрд▓ рдЕрдВрдХ рд╡рд┐рд╡рд░рдг рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди char32 рдореЗрдВ рдореМрдЬреВрджрд╛ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рд╕рдорд╛рдирддрд╛ рд╣реЛрдЧреА (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдХрд░реВрдВрдЧрд╛ рдпрд╣ рдХрд╣рдиреЗ рдореЗрдВ рд╕рдВрдХреЛрдЪ рдХрд░реЗрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХреЛрдб рдмрд┐рдВрджреБ рдПрдХ рд╡рд░реНрдг рдирд╣реАрдВ рд╣реИ)ред рдпрджрд┐ рд▓рдХреНрд╖реНрдп .NET рдореЗрдВ рдмреЗрд╣рддрд░ рдпреВрдирд┐рдХреЛрдб рд╕рдорд░реНрдерди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдореИрдВ рдЙрд╕ рдкрде рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХрд▓реНрдкрдирд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рд╣реИред

рддреАрди рд╕реБрдЭрд╛рд╡:

  1. рд░реВрдг рд╡рд░реНрдЧ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг "IsCombining" рдЧреБрдо рд╣реИред рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рд╣рдо рд░рдиреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ (рдХреЛрдб рдмрд┐рдВрджреБ) рд╕реЗ рдЕрдВрдЧреВрд░ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗред
  1. рдореБрдЭреЗ рдПрдХ рд╕рдВрдмрдВрдзрд┐рдд рдЧреНрд░реИрдлреЗрдо рдХреНрд▓рд╛рд╕ рднреА рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ред рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдХ рдЧреНрд░реИрдлреЗрдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рд░реВрдиреНрд╕ (рдХреЛрдб рдкреЙрдЗрдВрдЯреНрд╕) рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдкрд╣рд▓рд╛ рд░рди рд╕рдВрдпреЛрдЬрди рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рд╢реЗрд╖ рд░рди рд╕рдВрдпреЛрдЬрди рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдХрд┐рд╕реА рдбреЗрд╡рд▓рдкрд░ рдХреЛ "рджреГрд╢реНрдпрдорд╛рди рдкрд╛рддреНрд░реЛрдВ" рдХреЗ рд╣рд┐рд╕реНрд╕реЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдП + рдЧреНрд░реЗрд╡ рджреЛ рд░рди рд╣реИрдВ рдЬреЛ рдПрдХ рдЧреНрд░реЗрдлреЗрдо рдмрдирд╛рддреЗ рд╣реИрдВред

  2. рдиреЗрдЯрд╡рд░реНрдХрд┐рдВрдЧ рдореЗрдВ рд╣рдореЗрдВ рдЕрдХреНрд╕рд░ рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдПрдХ рд╣рдВрдХ рдорд┐рд▓рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ "рд╕реНрдЯреНрд░рд┐рдВрдЧ" рдЬреИрд╕реА рд╡рд╕реНрддреБ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд╣рд╛рдВ рдмрд╛рдЗрдЯреНрд╕ рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХреБрдЫ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдорд▓реНрдЯреА-рдмрд╛рдЗрдЯ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдЕрдВрддрд┐рдо рдмрд╛рдЗрдЯ рд╣реИ ' рдЯреА рдЕрднреА рддрдХ рдХрд╛рдлреА рдЖ рдЧрдпрд╛ рд╣реИ)ред рдореБрдЭреЗ рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рдзрд╛рд░рд╛ рдХреЛ рд░рдиреЛрдВ рдХреА рдПрдХ рдзрд╛рд░рд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХрд╛ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдорд▓реНрдЯреА-рдмрд╛рдЗрдЯ рдЕрдиреБрдХреНрд░рдо рдХреЗ рдЕрдВрддрд┐рдо рдмрд╛рдЗрдЯ рдХреЛ рдЧрд╛рдпрдм рдХрд░рдирд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рдорд╛рдиреА рдЬрд╛рддреА рд╣реИ рдЬрд┐рд╕реЗ рддрдм рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рд╣рдо рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдЕрдЧрд▓рд╛ рд╕реЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред

рдФрд░ рдЕрдВрдд рдореЗрдВ, рдХреГрдкрдпрд╛ рдпреВрдирд┐рдХреЛрдб рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдХреЛрдбрдкреЙрдЗрдВрдЯ рдХрд╣реЗрдВред рд╣рд╛рдВ рдпреВрдирд┐рдХреЛрдб рдХрдВрд╕реЛрд░реНрдЯрд┐рдпрдо рдЕрдВрддрд░ рд╕рдордЭрд╛рдиреЗ рдореЗрдВ рдПрдХ рднрдпрд╛рдирдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕рдорд╛рдзрд╛рди рд╕реНрдкрд╖реНрдЯ рдФрд░ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рджрд╕реНрддрд╛рд╡реЗрдЬ рдЬреЛрдбрд╝рдирд╛ рд╣реИ; рдХреБрдЫ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд╕рдВрдпреЛрдЬрди рдЕрдиреБрд░реЛрдз рдкрд░ рдХрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИ, рди рд╣реА рдЧреЛ, рд░рд╕реНрдЯ рдпрд╛ рд╕реНрд╡рд┐рдлреНрдЯ рд╕рддрд╣ рдРрд╕реЗ рдПрдкреАрдЖрдИ рдкрд░ рд░реВрдг, рдХреИрд░реЗрдХреНрдЯрд░ рдпрд╛ рдпреВрдирд┐рдХреЛрдб рд╕реНрдХреЗрд▓рд░ ( System.Rune рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рдирд╛рдо)ред рдХреГрдкрдпрд╛ рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░реЗрдВред

рдЧреНрд░реЗрдлреЗрдо рдХреНрд▓рд╕реНрдЯрд░ рдкрд░, рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдЗрд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ System.Rune рд╕реЗ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдХреНрдпрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдлреНрдЯ Character рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрд╡рд┐рдлреНрдЯ рднреА рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рд╛рди рдореЙрдбрд▓ рдирд╣реАрдВ рд╣реИред

рдмрд╛рдЗрдЯреНрд╕ рдХреА рдзрд╛рд░рд╛рдУрдВ рдХреЛ рдЙрдЪрд┐рдд рд░рди рдореЗрдВ рдмрджрд▓рдирд╛ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬреЛ рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рдПрдкреАрдЖрдИ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдЖрдк рдореЗрд░реЗ ustring рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдореЗрд░реЗ $#$ System.Rune $#$ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рдорд╛рди рд╕рдмреНрд╕рдЯреНрд░реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЗрди рдмрдлрд╝рд░реНрд╕ рдХреЛ utf8 рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдореЗрдВ рдХреИрд╕реЗ рдореИрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

https://github.com/migueldeicaza/NStack/blob/master/NStack/strings/ustring.cs

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдПрдкреАрдЖрдИ рдореЗрдВ System.Rune рдкреЗрд╢ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИ:

https://migueldeicaza.github.io/NStack/api/NStack/NStack.ustring.html

рдирд╛рдордХрд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд░рд╕реНрдЯ char рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдЗрд╕реЗ рдЧрдбрд╝рдмрдбрд╝ рдХрд░ рджрд┐рдпрд╛ред рджреВрд╕рд░рд╛ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда rune рдХреЗ рд╕рд╛рде рдЧреЛ рд╣реИред рдЪрд╛рд░ рд╡рд░реНрдгреЛрдВ рд╕реЗ рдмрдбрд╝рд╛ рдХреБрдЫ рднреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдПрдХ рдЙрдкрджреНрд░рд╡ рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рдорд╛рдл рдХрд░ рджреЛ; рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ CodePoint рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╛рдо рд╣реИред рдпрд╣ c p рдХреЗ рд╕рд╛рде рд╕реНрд╡-рд╡реНрдпрд╛рдЦреНрдпрд╛рддреНрдордХ, рдпрд╛рджрдЧрд╛рд░ рдФрд░ рд╕реНрд╡рддрдГ рдкреВрд░реНрдг рд╣реИред

IsCombining рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╕рдВрдпреЛрдЬрди рд╡рд░реНрдЧ рдХреЛ рднреА рдЬрд╛рдирдирд╛ рд╣реИ рдФрд░ рдПрдХ рдмрд╛рд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ IsCombining рдХрд╛рдлреА рд╣рдж рддрдХ рдЪреАрдиреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл IsCombining => CombiningClass != 0 рдпрд╛ IsCombining => CombiningClass != CombiningClass.None рд╣реИред рдЧреНрд░реИрдлреЗрдо рдХреНрд▓рд╕реНрдЯрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдЗрд╕рдХреЗ рдмрд╛рд╣рд░ рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ, рд░реАрдСрд░реНрдбрд░рд┐рдВрдЧ рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рд╕рдВрдпреЛрдЬрди рд╡рд░реНрдЧ рдХреЛ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ред

CodePoint рдХреЛрдб рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдирд╛рдо рд╣реИ, рдФрд░ рдЪрд╛рд░ рд╡рд░реНрдг рд╢рд╛рдпрдж рд╣реА рдПрдХ рд╕реАрдорд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рдЕрдиреНрдп рднрд╛рд░реА рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рдХрд╛рд░реЛрдВ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ; string 50% рдмрдбрд╝рд╛ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдЗрд╕реЗ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрддрд╛ рд╣реИред рдЪрд╛рд░ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдЪреБрдиреЗ рдЧрдП рдЕрдХреНрд╖рд░ рдЧреЛ рдХреА рдЧрд▓рддреА рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рд╕реЗ рдмреЗрд╣рддрд░ рдирд╛рдо рд╣реЛрдВрдЧреЗред

рдЪреВрдВрдХрд┐ uint рд╕реАрдПрд▓рдПрд╕-рдЕрдиреБрдкрд╛рд▓рди рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рд╕реАрдПрд▓рдПрд╕-рдЕрдиреБрдкрд╛рд▓рди рд╡рд╛рд▓рд╛ рд╕реАрдЯреАрдЖрд░ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╕реВрдХреНрд╖реНрдо рд╡рд┐рдорд╛рдиреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИред int рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ред

рджреЛ-рддрд░рдлрд╛ рдирд┐рд╣рд┐рдд рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рд╕реЗ рдУрд╡рд░рд▓реЛрдб рдХреЗ рд╕рд╛рде рдЦрд░рд╛рдм рдЪреАрдЬреЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдПрдХ рджрд┐рд╢рд╛ рд╢рд╛рдпрдж рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ред рдПрдХ рдУрд░ uint / int рдХреЛрдб-рдмрд┐рдВрджреБрдУрдВ рд╕реЗ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ 0 рд╕реЗ рдиреАрдЪреЗ рдпрд╛ 10FFFF 16 рд╕реЗ рдКрдкрд░ рдХреЗ рдорд╛рди рд╕рд╛рд░реНрдердХ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдЙрд╕ рд░реВрдкрд╛рдВрддрд░рдг рдирд┐рд╣рд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рдореМрдЬреВрджрд╛ рдПрдкреАрдЖрдИ рдХреЗ рддреНрд╡рд░рд┐рдд рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИ рд╕рдВрдЦреНрдпрд╛рдПрдВред рджреВрд╕рд░реА рддрд░рдл рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдХрд┐рд╕реА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдХреЛрдб-рдкреЙрдЗрдВрдЯ рдкрд░ рджреВрд╕рд░реА рддрд░рдл рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдбрд╛рд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдЪреВрдВрдХрд┐ рдпреВрдВрдЯ рд╕реАрдПрд▓рдПрд╕-рдЕрдиреБрдкрд╛рд▓рди рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рд╕реАрдПрд▓рдПрд╕-рдЕрдиреБрдкрд╛рд▓рди рд╡рд╛рд▓рд╛ рд╕реАрдЯреАрдЖрд░ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╕реВрдХреНрд╖реНрдо рд╡рд┐рдорд╛рдиреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИред int рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ред

рдпрд╣ рддрдм рддрдХ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЖрдо рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХ рдирдпрд╛ рдЖрдВрддрд░рд┐рдХ рдкреНрд░рдХрд╛рд░ рдкреЗрд╢ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ред

рдЬреЙрдирд╣рдиреНрдирд╛ - рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпреЗ рддреАрди рд░рдЪрдирд╛рдХрд╛рд░:
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдирд┐рд╣рд┐рдд рдСрдкрд░реЗрдЯрд░ uint (рд░реВрдг рд░реВрдг);
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдирд┐рд╣рд┐рдд рдСрдкрд░реЗрдЯрд░ рд░реВрдг (рдЪрд╛рд░ рд╕реАрдПрдЪ);
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдирд┐рд╣рд┐рдд рдСрдкрд░реЗрдЯрд░ рд░реВрдг (рдпреВрдВрдЯ рдореВрд▓реНрдп);

"рдпреВрдВрдЯ" рдХреЗ рдмрдЬрд╛рдп "рдЗрдВрдЯ" рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред AFAICT, int рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реВрдХреНрд╖реНрдо (рдЧреИрд░-рдмреАрдПрдордкреА) рд╡рд┐рдорд╛рдиреЛрдВ рдХреЗ рдкреВрд░реЗ рд╕реЗрдЯ рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИред

@PeterSmithRedmond рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕рд╛рде рд╣реА рд╕рд╛рде рджреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░, рдПрдХ char рд▓реЗ рд░рд╣рд╛ рд╣реИ рдФрд░ рдПрдХ uint рд▓реЗ рд░рд╣рд╛ рд╣реИ, рдПрдХ рдХреЛ int рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╣рд╛рдБ рдПрдХ int рднреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП implicit рдФрд░ рдХреНрдпрд╛ explicit рдПрдХ рдФрд░ рд╕рд╡рд╛рд▓ рд╣реИ)ред рдЙрди рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рднреА uint рд╣реЛрдиреЗ рдореЗрдВ рдХреЛрдИ рдмреБрд░рд╛рдИ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреА рд╣реИрдВ; рдЖрдЦрд┐рд░ рдпрд╣ рдХрд╛рдлреА рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рдореИрдЪ рд╣реИред

рдпрджрд┐ рдЗрд╕реЗ System.Char рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рддреЛ рдЙрд╕ рдкрд░ "рдЕрдВрдХрдЧрдгрд┐рдд" рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдпрд╛рдиреА ==,!=,>, <рдЕрдирд┐рд╢реНрдЪрд┐рдд +, -, *, /) рдФрд░ рдЗрд╕рд╕реЗ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕рдХреЗ рдЕрдХреНрд╖рд░ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рдХрд░реЗрдВ рдореБрдЭреЗ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

rune r = 'ЁРНИ'; // Ostrogothic character chose on purpose as in UTF16 will be a "surrogate pairs"


image

рдпрджрд┐ рдирд╣реАрдВ rune , рддреЛ character рдХрд╛ рдХреЗрд╡рд▓ рдЕрдиреНрдп рд╕рдорд╛рдирд╛рд░реНрдереА рдЬреЛ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ рд╡рд╣ рд╢рд╛рдпрдж letter рд╣реИ?

рд╕рдВрдЬреНрдЮрд╛

  1. рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдпрд╛ рд╕рдВрдЧрдарди рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рд▓рд┐рдЦрд┐рдд рдпрд╛ рдореБрджреНрд░рд┐рдд рд╕рдВрдЪрд╛рд░ рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдореЗрд▓ рджреНрд╡рд╛рд░рд╛ рдкреНрд░реЗрд╖рд┐рддред
  2. рдПрдХ рдкреНрд░рддреАрдХ рдпрд╛ рдЪрд░рд┐рддреНрд░ рдЬреЛ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд░реВрдк рд╕реЗ рднрд╛рд╖рдг рдзреНрд╡рдирд┐ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЗрдЦрди рдФрд░ рдореБрджреНрд░рдг рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдПрдХ рд╡рд░реНрдгрдорд╛рд▓рд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред
  3. рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рддреАрдХ рдпрд╛ рдЪрд░рд┐рддреНрд░ рд╡рд╛рд▓реЗ рдореБрджреНрд░рдг рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЕрдХреНрд╖рд░ рдмрдирд╛рдо рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдХрд░реЗрдЧрд╛

рд░реВрдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдпреВрдирд┐рдХреЛрдб (рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдиреЗрдЯ) рдореЗрдВ рдкрддреНрд░ рдХрд╛ рдФрд░ рднреА рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рдЕрд░реНрде рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдЕрдЧрд░ рд╣рдо рдЗрд╕реЗ рдПрдХ рдпреВрдирд┐рдХреЛрдб рд╡рд░реНрдг рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рддреЛ рд╣рдореЗрдВ рдпреВрдирд┐рдХреЛрдб рдХреЗ рдирд╛рдордХрд░рдг рдкрд░рдВрдкрд░рд╛рдУрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛; рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ _"рдХреЛрдб рдмрд┐рдВрджреБ"_ред

рдХреЛрдб рдкреНрд╡рд╛рдЗрдВрдЯ ред (1) рдпреВрдирд┐рдХреЛрдб рдХреЛрдбрд╕реНрдкреЗрд╕ рдореЗрдВ рдХреЛрдИ рднреА рдореВрд▓реНрдп; рдпрд╛рдиреА 0 рд╕реЗ 10FFFF16 рддрдХ рдХреЗ рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХрд╛ рдкрд░рд┐рд╕рд░ред ( рдзрд╛рд░рд╛ 3.4, рд╡рд░реНрдг рдФрд░ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд╛ D10 рджреЗрдЦреЗрдВред) рд╕рднреА рдХреЛрдб рдмрд┐рдВрджреБ рдПрдиреНрдХреЛрдбреЗрдб рд╡рд░реНрдгреЛрдВ рдХреЛ рдЕрд╕рд╛рдЗрди рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВред рдХреЛрдб рдмрд┐рдВрджреБ рдкреНрд░рдХрд╛рд░ рджреЗрдЦреЗрдВред (2) рдХрд┐рд╕реА рднреА рдХреЛрдбрд┐рдд рд╡рд░реНрдг рд╕реЗрдЯ рдореЗрдВ рдХрд┐рд╕реА рд╡рд░реНрдг рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рди, рдпрд╛ рд╕реНрдерд┐рддрд┐ред

рдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдмрд╕ рдЫреЛрдбрд╝ рджреЗрдВ рдФрд░ рдПрдХ рдмрддрдЦ рдХреЛ "рдмрддрдЦ" рдХрд╣реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдпреВрдирд┐рдХреЛрдб рд╡рд░реНрдг (рдЙрд░реНрдл uchar ) рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦреЗрдВред

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп System.CodePoint рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╣рд▓ рдХреНрдпреЛрдВ рди рдХрд░реЗрдВ?
рдЗрдореНрд╣реЛ рдпрд╣ рдпреВрдирд┐рдХреЛрдб рд╕реЗ рд╢рдмреНрджрд╛рд╡рд▓реА рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЕрдзрд┐рдХ рдЙрдЪрд┐рдд рд╣реИ, рдФрд░ рдЬрд╛рд╡рд╛ рджреБрдирд┐рдпрд╛ рдХреЗ рдЕрдиреНрдп рд▓реЛрдЧ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рддреЛ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рд╢рдмреНрдж рд░рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЖрдЗрдП рдпреВрдирд┐рдХреЛрдб рдХреА рд╢рд░реНрддреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВред рдпрд╣ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдФрд░ .NET рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд╡рд░реНрдгреЛрдВ рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЕрдзрд┐рдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╣реИ, рдЗрд╕ рддрдереНрдп рдХреЛ рднреА рдЬрд╛рдирддреЗ рд╣реБрдП рдХрд┐ .NET рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЪрд╛рд░ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИ, рдФрд░ рдЪрд╛рд░ рдХрд╛ рдпрд╣ рд╕рдВрдЧреНрд░рд╣ рдпреВрдирд┐рдХреЛрдб-рдЖрдзрд╛рд░рд┐рдд рд╣реИред

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЬрд╛рд╡рд╛ рдФрд░ .NET рджреЛрдиреЛрдВ рджреБрдирд┐рдпрд╛рдУрдВ рдореЗрдВ рд░рд╣рд╛ рд╣реВрдВред
рдФрд░ рд╢рд╛рдпрдж рдЗрд╕ рдкрд░ рдПрдХ рдорд╕реМрджрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢реБрд░реВ рдХрд░реЗрдВред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреЗ рджреЛ рдШрдЯрдХ рд╣реИрдВ рдФрд░ рджреЛрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА ( https://github.com/dotnet/corefxlab/issues/1799 рдореЗрдВ @GrabYourPitchforks рджреНрд╡рд╛рд░рд╛ CodeUnit)

C# keyword      Ugly Long form      Size
----------------------------------------
ubyte      <=>  System.CodeUnit    8 bit  - Assumed Utf8 in absence of encoding param
uchar      <=>  System.CodePoint  32 bit

CodeUnit / ubyte рдЪрд░ рдЪреМрдбрд╝рд╛рдИ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ Span<ubyte> рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рдЯреЗрдХреНрд╕реНрдЯ рдПрдкрд┐рд╕ рдЯреЗрдХреНрд╕реНрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ рд▓реЗрдХрд┐рди рдХрдЪреНрдЪреЗ рдмрд╛рдЗрдЯреНрд╕ рдкрд░ рдирд╣реАрдВ рд╣реИрдВред

CodePoint / uchar рд╕рдордЭрджрд╛рд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ; рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП .IndexOf(тЭд) рдХреЗ рд░реВрдк рдореЗрдВ ubyte рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рдорд▓реНрдЯреАрдмрд╛рдЗрдЯ рдпреВрдирд┐рдХреЛрдб рдЪрд╛рд░ рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ; рдФрд░ ubyte s рд╕реЗ рдЕрдзрд┐рдХ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдЬреЛрдЦрд┐рдо рд╕реЗ рднрд░рд╛ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЧрдгрдХ рдХреЛ uchar рдЗрдХрд╛рдЗрдпреЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рджреЛ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреЛ рдорд┐рд▓рд╛рдХрд░ рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛

using System;
using System.Runtime.InteropServices;

// C# Keywords
using ubyte = System.CodeUnit;
using uchar = System.CodePoint;
using uspan = System.Utf8Span;
using ustring = System.Utf8String;

namespace System
{
    public ref struct Utf8Span
    {
        private readonly ReadOnlySpan<ubyte> _buffer;

        public Utf8Span(ReadOnlySpan<ubyte> span) => _buffer = span;
        public Utf8Span(uspan span) => _buffer = span._buffer;
        public Utf8Span(ustring str) => _buffer = ((uspan)str)._buffer;
        public Utf8Span(ReadOnlyMemory<ubyte> memory) => _buffer = memory.Span;

        // Returns the CodeUnit index, not CodePoint index
        public int IndexOf(char value) => IndexOf(value, 0);
        public int IndexOf(char value, int startIndex) => IndexOf(value, 0, _buffer.Length);
        public int IndexOf(char value, int startIndex, int count);
        public int IndexOf(char value, StringComparison comparisonType);

        public int IndexOf(uchar value) => IndexOf(value, 0);
        public int IndexOf(uchar value, int startIndex) => IndexOf(value, 0, _buffer.Length);
        public int IndexOf(uchar value, int startIndex, int count);
        public int IndexOf(uchar value, StringComparison comparisonType);

        public uspan Substring(int codeUnitIndex);
        public uspan Substring(int codeUnitIndex, int codePointCount);

        public bool StartsWith(uchar ch) => _buffer.Length >= 1 && _buffer[0] == ch;
        public bool StartsWith(ustring str) => StartsWith((uspan)str);
        public bool StartsWith(uspan value) => _buffer.StartsWith(value._buffer);
        public bool EndsWith(uchar ch) => _buffer.Length >= 1 && _buffer[0] == ch;
        public bool EndsWith(ustring str) => EndsWith((uspan)str);
        public bool EndsWith(uspan value) => _buffer.EndsWith(value._buffer);

        public Enumerator GetEnumerator() => new Enumerator(this);

        // Iterates in uchar steps, not ubyte steps
        public ref struct Enumerator
        {
            public Enumerator(uspan span);

            public uchar Current;
            public bool MoveNext();
            public void Dispose() { }
            public void Reset() => throw new NotSupportedException();
        }
    }

    public class Utf8String
    {
        private readonly ReadOnlyMemory<ubyte> _buffer;

        public Utf8String(ustring str) => _buffer = str._buffer;
        public Utf8String(ReadOnlyMemory<ubyte> memory) => _buffer = memory;

        public bool StartsWith(uchar ch) => ((uspan)this).StartsWith(ch);
        public bool StartsWith(ustring value) => ((uspan)this).StartsWith(value);
        public bool StartsWith(uspan value) => ((uspan)this).StartsWith(value);
        public bool EndsWith(uchar ch) => ((uspan)this).EndsWith(ch);
        public bool EndsWith(ustring value) => ((uspan)this).EndsWith(value);
        public bool EndsWith(uspan value) => ((uspan)this).EndsWith(value);

        public static implicit operator uspan(ustring value) => new uspan(value._buffer);

        // Returns the CodeUnit index, not CodePoint index
        public int IndexOf(char value) => IndexOf(value, 0);
        public int IndexOf(char value, int startIndex) => IndexOf(value, 0, _buffer.Length);
        public int IndexOf(char value, int startIndex, int count);
        public int IndexOf(char value, StringComparison comparisonType);

        public int IndexOf(uchar value) => IndexOf(value, 0);
        public int IndexOf(uchar value, int startIndex) => IndexOf(value, 0, _buffer.Length);
        public int IndexOf(uchar value, int startIndex, int count);
        public int IndexOf(uchar value, StringComparison comparisonType);

        public ustring Substring(int codeUnitIndex);
        public ustring Substring(int codeUnitIndex, int codePointCount);

        public uspan.Enumerator GetEnumerator() => ((uspan)this).GetEnumerator();
    }

    [StructLayout(LayoutKind.Auto, Size = 1)]
    public struct CodeUnit : IComparable<ubyte>, IEquatable<ubyte>
    {
        private readonly byte _value;

        public CodeUnit(ubyte other) => _value = other._value;
        public CodeUnit(byte b) => _value = b;

        public static bool operator ==(ubyte a, ubyte b) => a._value == b._value;
        public static bool operator !=(ubyte a, ubyte b) => a._value != b._value;
        public static bool operator <(ubyte a, ubyte b) => a._value < b._value;
        public static bool operator <=(ubyte a, ubyte b) => a._value <= b._value;
        public static bool operator >(ubyte a, ubyte b) => a._value > b._value;
        public static bool operator >=(ubyte a, ubyte b) => a._value >= b._value;

        public static implicit operator byte(ubyte value) => value._value;
        public static explicit operator ubyte(byte value) => new ubyte(value);

        // other implicit conversions go here
        // if intrinsic then casts can be properly checked or unchecked

        public int CompareTo(ubyte other) => _value.CompareTo(other._value);

        public override bool Equals(object other) => (other is ubyte cu) && (this == cu);

        public bool Equals(ubyte other) => (this == other);

        public override int GetHashCode() => _value;

        public override string ToString() => _value.ToString();
    }

    [StructLayout(LayoutKind.Auto, Size = 4)]
    public struct CodePoint : IComparable<uchar>, IEquatable<uchar>
    {
        private readonly uint _value;

        public CodePoint(uint CodePoint);
        public CodePoint(char ch);

        public static ValueTuple<uchar, int> DecodeLastCodePoint(ubyte[] buffer, int end);
        public static ValueTuple<uchar, int> DecodeLastCodePoint(ustring str, int end);
        public static ValueTuple<uchar, int> DecodeCodePoint(ubyte[] buffer, int start, int n);
        public static ValueTuple<uchar, int> DecodeCodePoint(ustring str, int start, int n);
        public static int EncodeCodePoint(uchar CodePoint, ubyte[] dest, int offset);
        public static bool FullCodePoint(ubyte[] p);
        public static bool FullCodePoint(ustring str);
        public static int InvalidIndex(ubyte[] buffer);
        public static int InvalidIndex(ustring str);
        public static bool IsControl(uchar CodePoint);
        public static bool IsDigit(uchar CodePoint);
        public static bool IsGraphic(uchar CodePoint);
        public static bool IsLetter(uchar CodePoint);
        public static bool IsLower(uchar CodePoint);
        public static bool IsMark(uchar CodePoint);
        public static bool IsNumber(uchar CodePoint);
        public static bool IsPrint(uchar CodePoint);
        public static bool IsPunctuation(uchar CodePoint);
        public static bool IsSpace(uchar CodePoint);
        public static bool IsSymbol(uchar CodePoint);
        public static bool IsTitle(uchar CodePoint);
        public static bool IsUpper(uchar CodePoint);
        public static int CodePointCount(ubyte[] buffer, int offset, int count);
        public static int CodePointCount(ustring str);
        public static int CodePointLen(uchar CodePoint);
        public static uchar SimpleFold(uchar CodePoint);
        public static uchar To(Case toCase, uchar CodePoint);
        public static uchar ToLower(uchar CodePoint);
        public static uchar ToTitle(uchar CodePoint);
        public static uchar ToUpper(uchar CodePoint);
        public static bool Valid(ubyte[] buffer);
        public static bool Valid(ustring str);
        public static bool ValidCodePoint(uchar CodePoint);

        public static bool operator ==(uchar a, uchar b) => a._value == b._value;
        public static bool operator !=(uchar a, uchar b) => a._value != b._value;
        public static bool operator <(uchar a, uchar b) => a._value < b._value;
        public static bool operator <=(uchar a, uchar b) => a._value <= b._value;
        public static bool operator >(uchar a, uchar b) => a._value > b._value;
        public static bool operator >=(uchar a, uchar b) => a._value >= b._value;

        // etc
    }
}

рдореИрдВ рдЕрдкрдиреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ UnicodeScalar рдХрд╛ рдЙрдкрдпреЛрдЧ рдпреВрдирд┐рдХреЛрдб рд╕реНрдХреЗрд▓рд░ рдорд╛рди (U+0000..U+10FFFF рд╢реНрд░реЗрдгреА рдореЗрдВ рдорд╛рди, рд╕рдорд╛рд╡реЗрд╢реА; рд╕рд░реЛрдЧреЗрдЯ рдХреЛрдб рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░) рдФрд░ Utf8Char рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд░рд╣рд╛ рд╣реВрдВред UTF-8 рдХреЛрдб рдЗрдХрд╛рдИ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ _UnicodeScalar_ рдХреЗ рдмрдЬрд╛рдп _Rune_ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдХреМрд░ рд╕реЗ рдХрдо рд╣реИред рдореБрдЭреЗ рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ "рдпреВрдирд┐рдХреЛрдб рд╕реНрдХреЗрд▓рд░ рд╡реИрд▓реНрдпреВ" рд╢рдмреНрдж рдпреВрдирд┐рдХреЛрдб рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╣реА рд╢рдмреНрдж рд╣реИред ;)

.NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдПрдХ "рдЯреЗрдХреНрд╕реНрдЯ рдПрд▓рд┐рдореЗрдВрдЯ" рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рднреА рд╣реИ, рдЬреЛ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рд╕реНрдХреЗрд▓рд░ рд╣реИ рдЬреЛ рд╕рдВрдпреБрдХреНрдд рд╣реЛрдиреЗ рдкрд░ рдПрдХ рдЕрд╡рд┐рднрд╛рдЬреНрдп рдЧреНрд░реЗрдлреЗрдо рдмрдирд╛рддреЗ рд╣реИрдВред рдПрдордПрд╕рдбреАрдПрди рдкрд░ рдЗрд╕ рдкрд░ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реАред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЬрдм рдЖрдк рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдХреЛрдб рдЗрдХрд╛рдИ ( Utf8Char рдпрд╛ Char ), рд╕реНрдХреЗрд▓рд░ рдорд╛рди ( UnicodeScalar ), рдпрд╛ рдЯреЗрдХреНрд╕реНрдЯ рддрддреНрд╡ рджреНрд╡рд╛рд░рд╛ рдЧрдгрдирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рд╢реЗрд╖ рдкрд░рд┐рджреГрд╢реНрдпред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рд╣рдо рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ Utf8String рджреЛрдиреЛрдВ рдореЗрдВ рддреАрдиреЛрдВ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВрдЧреЗред

рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рд╕рддрд╣ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдИ рд╣реИ рдФрд░ рддреЗрдЬреА рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдЕрдзреАрди рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк https://github.com/dotnet/corefxlab/tree/utf8string/src/System.Text.Utf8/System рдкрд░ рдХреБрдЫ рд╡рд░реНрддрдорд╛рди рд╕реЛрдЪ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред https://github.com/dotnet/corefxlab/blob/master/src/System.Text.Primitives/System/Text/Encoders/Utf8Utility.csред

рдереЛрдбрд╝рд╛ рд╣рдЯрдХрд░ рд╡рд┐рд╖рдп:
рдХреНрдпрд╛ "рдЯреЗрдХреНрд╕реНрдЯ рдПрд▓рд┐рдореЗрдВрдЯ" UAX dotnet/corefx#29 рдореЗрдВ "рдЧреНрд░реИрдлреЗрдо рдХреНрд▓рд╕реНрдЯрд░ рдмрд╛рдЙрдВрдбреНрд░реАрдЬрд╝" рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕реЗрдЧрдореЗрдВрдЯреЗрд╢рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?

using System;
using System.Globalization;

class Program
{
    static void Main()
    {
        var e = StringInfo.GetTextElementEnumerator("ЁЯСйЁЯП╗тАНЁЯСжЁЯП╝ЁЯСиЁЯП╜тАНЁЯСжЁЯП╛тАНЁЯСжЁЯП┐ЁЯСйЁЯП╝тАНЁЯСиЁЯП╜тАНЁЯСжЁЯП╝тАНЁЯСзЁЯП╜ЁЯСйЁЯП╗тАНЁЯСйЁЯП┐тАНЁЯСзЁЯП╝тАНЁЯСзЁЯП╛");
        while (e.MoveNext())
        {
            Console.WriteLine(e.GetTextElement());
        }
    }
}

рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо:
тАН
тАНтАН
тАНтАНтАНтАН
тАНтАНтАНтАН

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдгрд╛рдо:
рдореИрдВ
рдореИрдВ
тАН
рдореИрдВ
рдореИрдВ
рдореИрдВ
рдореИрдВ
тАН
рдореИрдВ
рдореИрдВ
тАН
рдореИрдВ
рдореИрдВ
рдореИрдВ
рдореИрдВ
тАН
рдореИрдВ
рдореИрдВ
тАН
рдореИрдВ
рдореИрдВ
тАН
рдореИрдВ
рдореИрдВ
рдореИрдВ
рдореИрдВ
тАН
рдореИрдВ
рдореИрдВ
тАН
рдореИрдВ
рдореИрдВ
тАН
рдореИрдВ
рдореИрдВ

UnicodeScalar рдЯрд╛рдЗрдк рдХрд░рдирд╛ рдЕрднреА рднреА рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рдпреВ рдПрд╕ рд╕реА рд╕реНрдкреЗрд╕ (рд╕реНрд╡рддрдГ рдкреВрд░реНрдг) рдЪреВрдВрдХрд┐ рдпрд╣ рд╕рд╣реА, рд╕рдмрд╕реЗ рд╕реНрд╡-рд╡рд░реНрдгрдирд╛рддреНрдордХ рд╢рдмреНрдж рд╣реИ, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╡рд╣ рдорд┐рд▓ рдЬрд╛рдПрдЧрд╛ред

@ufcpp рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИред рдЙрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред рдпрджрд┐ рд╣рдо рдЕрдиреБрдХреВрд▓ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рд╣рдо рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ рдФрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ-рдЕрдиреБрд░реВрдк рдЧреНрд░реЗрдлреЗрдо рдПрдиреНрдпреВрдорд░реЗрдЯрд░ рдмрдирд╛рдПрдВред

ubyte / uchar рднреНрд░рдорд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╡реЗ unsigned char / unsigned byte рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдкрд┐рдд рджрд┐рдП рдЧрдП рд╕рдореНрдореЗрд▓рди рдХреА рддрд░рд╣ рдкрдврд╝рддреЗ рд╣реИрдВ $ ushort / uint / ulong ред рд╢рд╛рдпрдж char8 / u8char рдФрд░ char32 / u32char рд╕реНрдкрд╖реНрдЯ рд╣реИрдВ?

рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ UTF-8 рдХреЛрдб рдЗрдХрд╛рдЗрдпрд╛рдБ рдФрд░ рдХреЛрдб рдмрд┐рдВрджреБ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ, рдЗрд╕ рдкрд░ рд╣рдо рдЧрд▓рдд рд╣реИрдВ:

  1. .NET рдореЗрдВ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдЖрджрд┐рдо рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ - рдЬреИрд╕реЗ byte , int
  2. рдореМрдЬреВрджрд╛ рдЖрджрд┐рдо рд╕реЗ/рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдбреЗрдЯрд╛ рдкреНрд░рд╛рд░реВрдк - рдЬреИрд╕реЗ DateTime , Guid

рдФрд░ рдлрд┐рд░, рд╣рдо рдЙрд╕ рдирд┐рд░реНрдгрдп рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдХреЛрдбрдкреЙрдЗрдВрдЯ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдПрдкреАрдЖрдИ рдХреЛ рдХреИрд╕реЗ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ?

рд╡рд┐рдХрд▓реНрдк 1 рдХрд╛ рдЕрд░реНрде рд╣реИ C++17 рдЬреИрд╕реЗ char8, char16, рдФрд░ char32 рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡реНрд╕ (рдФрд░ рд╕рд╛рде рдореЗрдВ u8string, u16string, рдФрд░ u32string) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рд╣реИрдВрдбрд▓ рдХрд░рдирд╛ред рдлрд┐рд░ char32 rune рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдмреБрд░рд╛ рдирд╛рдо рд╣реИ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА char16 char рд╣реИ рдФрд░ char8 рдХреЗ рд▓рд┐рдП рднреА рддреАрд╕рд░реЗ рдирд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╡рд┐рдХрд▓реНрдк 2 рдХрд╛ рдЕрд░реНрде рд╣реИ рдмрд╛рдЗрдЯ рдФрд░ рдЗрдВрдЯ/рдпреВрдЗрдВрдЯ рдпреВрдЯреАрдПрдл рдХреЛрдб рдЗрдХрд╛рдЗрдпреЛрдВ рдФрд░ рдХреЛрдб рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 'рдХрд╛рдлреА рдЕрдЪреНрдЫреЗ' рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕рднреА рддрд╛рд░ UTF-16 рдмрдиреЗ рд░рд╣реЗрдВрдЧреЗред CodePoint / rune рдмрд╛рдЗрдирд░реА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рдмрдЬрд╛рдп Code Point рд╢рдмреНрджрд╛рд░реНрде рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ - рдФрд░ IO рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рдирд╣реАрдВ рд╣реИ ред

рдЖрдИрдПрдордУ рдпреВрдЯреАрдПрдл -8/рдпреВрдЯреАрдПрдл -32 рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рдкреНрд░рд╛рд░реВрдк рд╣реИрдВ (рд╡рд┐рдХрд▓реНрдк 2)ред рдЙрдиреНрд╣реЗрдВ рдбреЗрдЯрд╛ (рдмрд╛рдЗрдЯ/рдЗрдВрдЯ) рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдиреЗрдВред CodePoint int рддреБрд▓рдирд╛ рдореЗрдВ DateTime рдпрд╛ Guid (рдПрдХ рдЕрдиреНрдп рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛*) рдХреА рддрд░рд╣ рдЕрдзрд┐рдХ рд╣реИ - рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ, рд╕реАрдзреЗ IO рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ (рдпрд╛рдиреА рдмрд╛рдЗрдирд░реАрд╡рд╛рдЗрдЯрд░), рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдХреА рдХреЛрдИ рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИред

@miyu рд╣рдо corefxlab рдореЗрдВ рдЬреЛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд▓рд╛ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рд╡рд┐рдХрд▓реНрдк 1 рдХреЗ рдХрд░реАрдм рд╣реИред рдХреЛрдб рдЗрдХрд╛рдЗрдпреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ, рдФрд░ рдпреЗ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдЯреЗрдХреНрд╕реНрдЯ рдбреЗрдЯрд╛ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рд▓рд┐рдП рд╣реИрдВ рдФрд░ рдкреВрд░реЗ рддрд╛рд░ рдореЗрдВ рдЯреЗрдХреНрд╕реНрдЯ рдбреЗрдЯрд╛ рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред (рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, .NET рдЖрдЬ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: System.Char UTF-16 рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдХреЛрдб рдЗрдХрд╛рдИ рд╣реИ, рд▓реЗрдХрд┐рди System.Char рдкреВрд░реЗ рддрд╛рд░ рдореЗрдВ рдирд╣реАрдВ рднреЗрдЬрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред)

рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, byte[] / Span<byte> / рдЖрджрд┐ рдХреЗ рдмреАрдЪ рдХрдирд╡рд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рд╣реИрдВ (рдпрд╣ рд╕рднреА рдбреЗрдЯрд╛ рдХрд╛ рдмрд╛рдЗрдирд░реА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реИ рдФрд░ I/O рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ) рдФрд░ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рдЬреИрд╕реЗ Utf8String / String / Guid / рдЖрджрд┐ред рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рджреВрд╕рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реАрдзреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╕реБрд╡рд┐рдзрд╛ Utf8String.Bytes рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ i/o рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП ReadOnlySpan<byte> рд▓реМрдЯрд╛рддреА рд╣реИ, рдФрд░ рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдЧреЗрдЯрд░ рдореЗрдВ рдУ (1) рдЬрдЯрд┐рд▓рддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рд╣рдо String рдкреНрд░рдХрд╛рд░ рдкрд░ рдРрд╕реА рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдкрд░рд┐рдЪрдп рдирд╣реАрдВ рджреЗрдВрдЧреЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдк String.ToUtf8Bytes() рд╕реБрд╡рд┐рдзрд╛ рдкрджреНрдзрддрд┐ рд╣реЛрдиреЗ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рднрд▓реЗ рд╣реА рдПрдХ Utf8String.Bytes рд╕рдВрдкрддреНрддрд┐ рдореМрдЬреВрдж рд╣реЛ, Utf8String рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╕реАрдзреЗ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХрд╛ рдореМрд▓рд┐рдХ рдкреНрд░рдХрд╛рд░ byte рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдпрд╣ Utf8CodeUnit (рдирд╛рдо рдЯреАрдмреАрдбреА) рдпрд╛ UnicodeScalar рд╣реЛрдЧрд╛, рдЬреЛ рднреА рд╣рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

рджреАрд╡рд╛рд░ рдХреЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг - wchar (_wide char_) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдЖрдЬ, рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕реА рдФрд░ рд╕реА ++ рдХрдВрдкрд╛рдЗрд▓рд░ рд╡рд╛рддрд╛рд╡рд░рдг (рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рдмрд╛рд╣рд░) рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 32-рдмрд┐рдЯ рдХреЛрдб рдЗрдХрд╛рдИ рдХреЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╕рдордХрдХреНрд╖ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП wchar_t рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╡рд┐рдВрдбреЛрдЬрд╝ рдПрдХ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдЕрдкрд╡рд╛рдж рд╣реИ, рдЬрд╣рд╛рдВ wchar_t рдХреЛ 16-рдмрд┐рдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЬреЛ рдЖрдЬ рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ рдкреА/рдЖрд╣реНрд╡рд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА .NET char рдХреЗ рдмреАрдЪ рдмрд┐рдЯ рдЪреМрдбрд╝рд╛рдИ рдХреЗ рдЕрдВрддрд░ рд╕реЗ рдЕрд╡рдЧрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред char ред

рдкреНрд░рдХрд╛рд░ / рдХреАрд╡рд░реНрдб wchar рд╣рдорд╛рд░реЗ рдирд╛рдордХрд░рдг рдкрд░рдВрдкрд░рд╛рдУрдВ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдХреЗрд╡рд▓ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░ рдлреЗрдВрдХ рджреЗрдЧрд╛ред

рджреАрд╡рд╛рд░ рдХреЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг - wchar (рдЪреМрдбрд╝реЗ рдЪрд╛рд░) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

рдореЗрд░реЗ рд▓рд┐рдпреЗ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ

рдкреНрд░рдХрд╛рд░ / рдХреАрд╡рд░реНрдб wchar рд╣рдорд╛рд░реЗ рдирд╛рдордХрд░рдг рдкрд░рдВрдкрд░рд╛рдУрдВ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░реЗрдЧрд╛, ...

рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ C# рднрд╛рд╖рд╛ рдХрд╛ рдХреАрд╡рд░реНрдб рдорд┐рд▓рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ

https://github.com/dotnet/apireviews/pull/64#discussion_r196962756 рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рдХреАрд╡рд░реНрдб рдкреЗрд╢ рдХрд░реЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдЗрдиреНрд╣реЗрдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛрдирд╛ рд╣реЛрдЧрд╛ (рдпрд╛рдиреА рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ рдХреАрд╡рд░реНрдб рдХрд╛ рдирд╛рдо рдЙрдиреНрд╣реЗрдВ рдЕрднреА рднреА рдЙрд╕ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдЬреБрдбрд╝рдирд╛ рд╣реЛрдЧрд╛, рдмрдЬрд╛рдп рдХреАрд╡рд░реНрдб рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдП рдЧрдП рдкреНрд░рдХрд╛рд░ рдХреЗ)ред

рддреЛ рдЕрдЧрд░ рд╣рдо рдХреБрдЫ рдЕрдЪреНрдЫрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ... рдпрд╛рдиреА NotLotsOfCapitalFullWords ...

рдЬрдмрдХрд┐ рдореИрдВ рдЖрдо рддреМрд░ рдкрд░ .NET рдХреЗ рдирд╛рдордХрд░рдг рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХреЛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рдПрдХ рд▓рдВрдмрд╛ рдирд╛рдо рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ int рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдЖрдХреНрд░рд╛рдордХ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬреЗрдирд░рд┐рдХ рдФрд░ рд▓реВрдк рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЬреИрд╕реЗ рдХреЛрдИ рдирд╣реАрдВ рдХрд░рддрд╛

foreach (Int32 i in list)
{
    // ...
}

рдХреНрдпрд╛ рд╡реЗ? (рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ...)

foreach (UnicodeScalar us in str)
{
    // ...
}

рдХрд╣реАрдВ рдЬреНрдпрд╛рджрд╛ рдЦрд░рд╛рдм рд╣реИ

foreach (wchar c in str)
{
    // ...
}

рдареАрдХ рд▓рдЧрддрд╛ рд╣реИ...

rune , wchar , рдФрд░ uchar (рдЕрдиреНрдп рдзрд╛рдЧреЗ рдкрд░ рд╕реБрдЭрд╛рдП рдЧрдП) рд╕рднреА рдореБрдЭреЗ рдЕрдЪреНрдЫреЗ рд▓рдЧрддреЗ рд╣реИрдВред string рдХреЗ рдХрд┐рд╕реА рд╕рд╣рдХрд░реНрдореА рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕реБрдЭрд╛рд╡? wstring , ustring , рдпрд╛ рдЕрдиреНрдп?

... рдФрд░ рд╕реА # рднрд╛рд╖рд╛ рдХреАрд╡рд░реНрдб рдХреНрдпреЛрдВ рдирд╣реАрдВ рдорд┐рд▓рддрд╛? рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдкрд╣рд▓реА рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд╣реАрдВ рд╣реЛрдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЬрд╛ рд░рд╣рд╛ рд╣реИ рддреЛ рдХреЛрдИ рдХреАрд╡рд░реНрдб рди рдХреЗрд╡рд▓ рдХрдкрдЯрдкреВрд░реНрдг рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕реЗ рдЕрдкрдирд╛рдиреЗ рдХреЗ рдкреНрд░рддрд┐ рдЕрддреНрдпрдзрд┐рдХ рд╢рддреНрд░реБрддрд╛рдкреВрд░реНрдг рд╣реИред

/рд╕реАрд╕реА @MadsTorgersen @jaredpar

рд╕реА # рднрд╛рд╖рд╛ рдХреАрд╡рд░реНрдб рдХреНрдпреЛрдВ рдирд╣реАрдВ рдорд┐рд▓рддрд╛?

рдирдП рдХреАрд╡рд░реНрдб 100% рдмрд╛рд░ рдкрд░рд┐рд╡рд░реНрддрди рддреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВред рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдЖрдк рдХреМрди рд╕рд╛ рд╢рдмреНрдж рдЪреБрдирддреЗ рд╣реИрдВ, рд╡рд╣рд╛рдБ рдПрдХ рдХрдВрдкрдиреА рд╣реИ рдЬрд┐рд╕рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд╛рдо рд╣реИ рдЬреЛ рдЙрдирдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╣рд░ рдЬрдЧрд╣ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХрдорд╛рддреНрд░ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдХреАрд╡рд░реНрдб рд╣реИрдВ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП var ред

рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реА рдорд┐рд╢реНрд░рд┐рдд рднрд╛рд╡рдирд╛рдПрдВ рд╣реИрдВред рдореМрдЬреВрджрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреАрд╡рд░реНрдб ( int , string , рдЖрджрд┐ ...) рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд╛рдо ( Int32 , String ) рдкрд░ рдПрдХ рдареЛрд╕ рд▓рд╛рдн рд╣реИ:

  • string : рдпрд╣ рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рдкреНрд░рдХрд╛рд░ System.String рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛрд░рд▓рд┐рдм рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИред рдЗрд╕ рдирд╛рдо рдХреЗ рд╕рд╛рде рд╢реВрдиреНрдп рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИред
  • String : рд╕рдВрдХрд▓рдХ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╢реВрдиреНрдп рд╕рдордЭ рд╣реИред рдпрд╣ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреА рддрд░рд╣ рд╣реА рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ рдФрд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рдорд╛рди рд▓реБрдХрдЕрдк рдирд┐рдпрдореЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ string рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдПрдХ рдмрд╛рд░ рдЬрдм рд╣рдо рдпрд╣рд╛рдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдХреАрд╡рд░реНрдб рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВ рддреЛ rune рдпрд╛ рддреЛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

  • рдХреЛрд░рд▓рд┐рдм рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдЕрдВрджрд░ System.Rune рдЯрд╛рдЗрдк рдХрд░реЗрдВ
  • рдкреНрд░рдХрд╛рд░ rune рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рджреЛ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдерд╛ рдЬрдм рдЖрдкрдиреЗ Go рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝рд╛ рдерд╛ред

rune String рд╣реА рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕реЗ рдПрдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдХреАрд╡рд░реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрдиреЗ рдХрд╛ рдХреЛрдИ рдареЛрд╕ рд▓рд╛рдн рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИред

BTW: рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЖрдкрдХреЛ string рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рди рдХрд┐ String

рдмреАрдЯреАрдбрдмреНрд▓реВ: рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЖрдкрдХреЛ string рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ String

рдХреМрди рд╕рд╛ 99% рдХрд╛рд░рдг рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓реЛрдЧ рднрд╛рд╖рд╛ рдХреАрд╡рд░реНрдб рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЕрдиреНрдп 1% рдпрд╣ рд╕рд┐рд░реНрдл "рдмреЗрд╣рддрд░ рджрд┐рдЦрддрд╛ рд╣реИ"

"рд░реВрди" рдХреАрд╡рд░реНрдб рдХреЗ рд▓рд┐рдП рдордЬрдмреВрдд рдирд╛рдкрд╕рдВрджрдЧреА рдХреЗ рд▓рд┐рдП рдЕрдВрдЧреВрдареЗ рдиреАрдЪреЗред

рдПрдХ рдмреЗрд╣рддрд░ рд╢рдмреНрдж рдЧреНрд▓рд┐рдлрд╝ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЯрд╛рдЗрдкреЛрдЧреНрд░рд╛рдлреА рдореЗрдВ рдПрдХ рдореМрд▓рд┐рдХ рдкреНрд░рддреАрдХ рдХреА рд╕рд╛рдорд╛рдиреНрдп рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред

рд░реВрдг рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЧреНрд▓рд┐рдлрд╝ рд╣реИ рдЬрд┐рд╕реЗ рд╡рд┐рдбрдВрдмрдирд╛ рд╕реЗ рдпреВрдирд┐рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЧреЛ рдХреЛ рдкреВрд░реНрд╡ рдХрд▓рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдирд╛ рдХреБрдЫ рд╣рдж рддрдХ рд╣рд╛рд╕реНрдпрд╛рд╕реНрдкрдж рд╣реИред рд░рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрд╡ рдХрд▓рд╛ рд╡рд╣ рд╣реИ рдЬреЛ 150 рдИрд╕реНрд╡реА рдореЗрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рднреМрддрд┐рдХ рд░реВрдг рдкрддреНрдерд░реЛрдВ рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рдереАред рд░реЗрдбрдордВрдб рдореЗрдВ рдХреЛрдИ рдРрд╕рд╛ рдирд╣реАрдВ рд╕реЛрдЪрддрд╛ рдЬреЛ рд░реВрдг рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреА рдореМрдЬреВрджрд╛ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдЕрд╕рд╛рдорд╛рдиреНрдп рд╣реИ рдХреНрдпреЛрдВрдХрд┐ .NET рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рдЧрдИ рдПрдкреАрдЖрдИ рд╕рддрд╣ рд╣реЛрддреА рд╣реИред рдпрд╣ рдмрд╣реБрдд рдЦрд░рд╛рдм рдПрдкреАрдЖрдИ рдирд╛рдордХрд░рдг рдХрд╛ рдПрдХ рджреБрд░реНрд▓рдн рдЕрдкрд╡рд╛рдж рд╣реИ рдФрд░ рдореИрдВ рдЕрдкрдиреЗ рдЕрд╕рдВрддреЛрд╖ рдХреЛ рдЖрд╡рд╛рдЬ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдПрдХ рдмреЗрд╣рддрд░ рд╢рдмреНрдж рдЧреНрд▓рд┐рдлрд╝ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЯрд╛рдЗрдкреЛрдЧреНрд░рд╛рдлреА рдореЗрдВ рдПрдХ рдореМрд▓рд┐рдХ рдкреНрд░рддреАрдХ рдХреА рд╕рд╛рдорд╛рдиреНрдп рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ "рдЧреНрд▓рд┐рдлрд╝" рдПрдХ рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╢рдмреНрдж рд╣реИ рдЬрдм рдпреВрдирд┐рдХреЛрдб рдХреЛ рджреГрд╢реНрдпрдорд╛рди рдкрд╛рда рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╕реЗ: utf8everywhere.org )

рдЧреНрд▓рд┐рдлрд╝

рдПрдХ рдлрд╝реЙрдиреНрдЯ рдХреЗ рднреАрддрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЖрдХрд╛рд░ред рдлрд╝реЙрдиреНрдЯреНрд╕ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдбрд┐рдЬрд╝рд╛рдЗрдирд░ рджреНрд╡рд╛рд░рд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рдЧреНрд▓рд┐рдлрд╝ рдХрд╛ рд╕рдВрдЧреНрд░рд╣ рд╣реИрдВред рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлрд╝реЙрдиреНрдЯ рдХреЗ рднреАрддрд░ рдХреЛрдб рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдЧреНрд▓рд┐рдлрд╝ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЬрди рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдХреЛ рдЖрдХрд╛рд░ рджреЗрдиреЗ рдФрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкрд╛рда рд╣реИред рдЗрд╕ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рдирд┐рдпрдо рдЬрдЯрд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд╕реНрдерд╛рдиреАрдп рднрд╛рд╖рд╛ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпреВрдирд┐рдХреЛрдб рдорд╛рдирдХ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИрдВред

рдЧреЛ рдХреЛ рдкреВрд░реНрд╡ рдХрд▓рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдирд╛ рдХреБрдЫ рд╣рдж рддрдХ рд╣рд╛рд╕реНрдпрд╛рд╕реНрдкрдж рд╣реИред

Utf-8 https://www.cl.cam.ac.uk/~mgk25/ucs/utf-8-history.txt рдмрдирд╛рддреЗ рд╕рдордп рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЧрдП рд░реЙрдм рдкрд╛рдЗрдХ рдФрд░ рдХреЗрди рдереЙрдореНрдкрд╕рди рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рд░реЙрдм рдкрд╛рдЗрдХ рдЕрдм рдЧреЛ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдореВрд▓ рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рд░реВрдг рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЧреНрд▓рд┐рдлрд╝ рд╣реИ рдЬрд┐рд╕реЗ рд╡рд┐рдбрдВрдмрдирд╛ рд╕реЗ рдпреВрдирд┐рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд░реВрдирд┐рдХ рдпреВрдирд┐рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд░реВрдг рдирд╣реАрдВ рд╣реИ

рд░реВрдирд┐рдХ рдпреВрдирд┐рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд░реВрдг рдирд╣реАрдВ рд╣реИ

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдПрдХ рд╕рдЯреАрдХ рдХрдерди рд╣реИ, рдирд╡реАрдирддрдо рдпреВрдирд┐рдХреЛрдб рдпреБрдХреНрддрд┐ (http://www.unicode.org/versions/Unicode11.0.0/UnicodeStandard-11.0.pdf) рдореЗрдВ "рд░реВрди" рдХреЗ рд▓рд┐рдП 37 рд╣рд┐рдЯ рд╣реИрдВ (рдХреЗрд╡рд▓ 36 рдорд╛рдиреНрдп рд╣реИрдВ) , рдЕрдВрддрд┐рдо рдПрдХ рдмрдбрд╝реЗ рд╢рдмреНрдж рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ) рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдореЗрд╢рд╛ рд░реВрдирд┐рдХ рд╡рд░реНрдгрдорд╛рд▓рд╛ рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрдХреНрд╖рд░реЛрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдПрдХ рд╕рдЯреАрдХ рдмрдпрд╛рди рд╣реИ, рдирд╡реАрдирддрдо рдпреВрдирд┐рдХреЛрдб рд╕реНрдкреЗрдХ рдореЗрдВ "рд░рди" рдХреЗ рд▓рд┐рдП 37 рд╣рд┐рдЯ рд╣реИрдВ

рдкреНрд░реЗрд░рдгрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмреЙрдбреА рдЯреЗрдХреНрд╕реНрдЯ рдореЗрдВ; рдХрд┐рд╕реА рднреА рд╡рд░реНрдг рдирд╛рдо рдпрд╛ рдЯреЗрдХреНрд╕реНрдЯ рдмреНрд▓реЙрдХ рдирд╛рдо рдореЗрдВ рдирд╣реАрдВ (рдЬрд╣рд╛рдВ рдЗрд╕рдХрд╛ рд░реВрдирд┐рдХ рдФрд░ рд░реВрдирд┐рдХ рд╡рд░реНрдг)

рдкреНрд░реЗрд░рдгрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмреЙрдбреА рдЯреЗрдХреНрд╕реНрдЯ рдореЗрдВ; рдХрд┐рд╕реА рднреА рд╡рд░реНрдг рдирд╛рдо рдпрд╛ рдЯреЗрдХреНрд╕реНрдЯ рдмреНрд▓реЙрдХ рдирд╛рдо рдореЗрдВ рдирд╣реАрдВ (рдЬрд╣рд╛рдВ рдЗрд╕рдХрд╛ рд░реВрдирд┐рдХ рдФрд░ рд░реВрдирд┐рдХ рд╡рд░реНрдг)

рдареАрдХ рд╣реИ, рдирд┐рд╖реНрдкрдХреНрд╖ред рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЧрдП рд╣реИрдВ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдпреВрдирд┐рдХреЛрдб рд╕реНрдкреЗрдХ "рд░реВрди" рд╢рдмреНрдж рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЬрдм рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ "рд░реВрдирд┐рдХ рд╡рд░реНрдгреЛрдВ" рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕реВрдЪрдирд╛рддреНрдордХ рдкрд╛рда рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИред

рдЪреАрдЬреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдФрд░ рдЙрдкрдпреЛрдЧ рдХреНрдпрд╛ рд╣реИ "рдХреЛрдб рдкреНрд╡рд╛рдЗрдВрдЯ" рдФрд░ "рдХреЛрдб рдпреВрдирд┐рдЯ" рд╣реИред

  • рднрд▓реЗ рд╣реА, рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ, рдореВрд▓ рдирд┐рд░реНрдорд╛рддрд╛ рдиреЗ "рд░реВрди" рд╢рдмреНрдж рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рд╣реЛ, рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдХрд▓реНрдкрдирд╛ рдирд╣реАрдВ рд╣реИ (рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдиреЗ рдХреЗ рдЕрдЪреНрдЫреЗ рдХрд╛рд░рдг рдереЗ)ред

рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрджрд╕реВрд░рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ

int CountCommas(string str)
{
    int i = 0;
    foreach(UnicodeCodePoint c in str.AsUnicodeCodePoints())
    {
        if (c == ',') i++;
    }
}

string Trim(string str)
{
    int end = str.Length - 1;
    int start = 0;

    for (start = 0; start < Length; start++)
    {
        if (!UnicodeCodePoint.IsWhiteSpace(str.GetUnicodeCodePointAt(start)))
        {
            break;
        }
    }

    for (end = Length - 1; end >= start; end--)
    {
        if (!UnicodeCodePoint.IsWhiteSpace(str.GetUnicodeCodePointAt(start)))
        {
            break;
        }
    }

    return str.SubString(start, end);
}

рдмрдирд╛рдо

int CountCommas(string str)
{
    int i = 0;
    foreach(Rune c in str.AsRunes())
    {
        if (c == ',') i++;
    }
}

string Trim(string str)
{
    int end = str.Length - 1;
    int start = 0;

    for (start = 0; start < Length; start++)
    {
        if (!Rune.IsWhiteSpace(str.GetRuneAt(start)))
        {
            break;
        }
    }

    for (end = Length - 1; end >= start; end--)
    {
        if (!Rune.IsWhiteSpace(str.GetRuneAt(start)))
        {
            break;
        }
    }

    return str.SubString(start, end);
}

рд▓рдВрдмрд╛рдИ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ CodePoint.IsWhiteSpace рдФрд░ str.GetCodePointAt рдХреЗ рд▓рд┐рдП рдЬрд╛рдКрдВрдЧрд╛, рд▓реЗрдХрд┐рди Rune рднреА рдордЬреЗрджрд╛рд░ рд╣реИ рдФрд░ рдореБрдЭреЗ рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ред

@ jnm2 рдЬрдм рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ рддреЛ рд╣рдо GetCodePointAt рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдпрд╣ рдмрд╣реБрдд рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ: рд╣рдо рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдХреНрдпрд╛ рдЖрдк char рдЪрд╛рд╣рддреЗ рдереЗ рдЬреЛ рдЙрд╕ рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рд╣реБрдЖ рд╣реЛ (рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА char s - рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдпреБрдЧреНрдорд┐рдд рд╕рд░реЛрдЧреЗрдЯ - рднреА рдорд╛рдиреНрдп рдХреЛрдб рдмрд┐рдВрджреБ рд╣реИрдВ) рдпрд╛ рдЕрджрд┐рд╢ / рд░реВрдг рдЬреЛ рдЙрд╕ рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рд╣реБрдЖ рдерд╛ред

@GrabYourPitchforks GetRuneAt рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЖрдк рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рди рддреЛ рдХреЛрдИ рдорддрд▓рдм рд╣реЛрдЧрд╛?

@ jnm2 рдореИрдВ рдмрд╕ рдЗрддрдирд╛ рдХрд╣ рд░рд╣рд╛ рдерд╛ рдХрд┐ CodePoint рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рдмрд╣реБрдд рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИред рдЕрдиреНрдпрдерд╛ рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо GetXyzAt рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд╛рдо Xyz рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЕрдВрддрддрдГ рдЕрдВрджрд░ рдЬрд╛рддрд╛ рд╣реИред

FYI рдХрд░реЗрдВ рдореБрдЦреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрдм рдЪреЗрдХ рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рджреЗрдЦреЗрдВ https://github.com/dotnet/coreclr/pull/20935)ред рдЗрд╕реЗ corefx рдореЗрдВ рдкреНрд░рдЪрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдордп рджреЗрдВ, рдлрд┐рд░ ref API https://github.com/dotnet/corefx/pull/33395 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖ рдЬрд╛рдПрдЧрд╛ред рдмреЗрдЭрд┐рдЭрдХ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЦреБрд▓рд╛ рдЫреЛрдбрд╝ рджреЗрдВ рдпрд╛ рдЬреИрд╕рд╛ рдЖрдк рдЙрдЪрд┐рдд рд╕рдордЭреЗрдВ рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░реЗрдВред

рдореИрдВ рдХрд┐рд╕реА рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рдпрд╛ рдХреБрдЫ рднреА рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП:

рдПрдХ рдмреЗрд╣рддрд░ рд╢рдмреНрдж рдЧреНрд▓рд┐рдлрд╝ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЯрд╛рдЗрдкреЛрдЧреНрд░рд╛рдлреА рдореЗрдВ рдПрдХ рдореМрд▓рд┐рдХ рдкреНрд░рддреАрдХ рдХреА рд╕рд╛рдорд╛рдиреНрдп рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ "рдЧреНрд▓рд┐рдлрд╝" рдПрдХ рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╢рдмреНрдж рд╣реИ рдЬрдм рдпреВрдирд┐рдХреЛрдб рдХреЛ рджреГрд╢реНрдпрдорд╛рди рдкрд╛рда рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╕реЗ: utf8everywhere.org )

рддрд░реНрдХ рдХреА рд╡рд╣ рдкрдВрдХреНрддрд┐ рдпрд╛ рддреЛ рд░реВрдг рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпреВрдирд┐рдХреЛрдб рдпрд╛ рдЯреНрд░рд╛рдВрдЬрд┐рд╕реНрдЯрд░ рдпрд╛ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдпрд╛ рдУрдкрди рд╕реЛрд░реНрд╕ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рдЖрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, "рд░реВрди" рдкреВрд░реЗ рдЗрддрд┐рд╣рд╛рд╕ рдореЗрдВ рдПрдХ рд╣рдЬрд╛рд░ рд╕рд╛рд▓ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╢рдмреНрдж рд░рд╣рд╛ рд╣реИред рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдорд╛рдирдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реБрд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╢рд╛рдпрдж рдпрд╣ рд╕рдмрд╕реЗ рд╕реБрд╕рдВрдЧрдд рддрд░реНрдХ рдХреЗ рдмрдЬрд╛рдп рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдХреМрди рдерд╛ рдпрд╛ рд╕рдмрд╕реЗ рдЬреЛрд░ рд╕реЗ рд╣реИ, рдореБрдЭреЗ рдХреНрдпрд╛ рдкрддрд╛ рд╣реИред рдореИрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдореЗрдВ рджреЗрд░ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓рд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред

рдЧреЛ рдХреЛ рдкреВрд░реНрд╡ рдХрд▓рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдирд╛ рдХреБрдЫ рд╣рдж рддрдХ рд╣рд╛рд╕реНрдпрд╛рд╕реНрдкрдж рд╣реИред

Utf-8 https://www.cl.cam.ac.uk/~mgk25/ucs/utf-8-history.txt рдмрдирд╛рддреЗ рд╕рдордп рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЧрдП рд░реЙрдм рдкрд╛рдЗрдХ рдФрд░ рдХреЗрди рдереЙрдореНрдкрд╕рди рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рд░реЙрдм рдкрд╛рдЗрдХ рдЕрдм рдЧреЛ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдореВрд▓ рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдЧреЛ рдФрд░ рд░реЙрдм рдкрд╛рдЗрдХ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдирд╡рд╛рдЧрдВрддреБрдХ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдирдХреА рд░рд╛рдп рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ рдФрд░ рд▓реЛрдХрдкреНрд░рд┐рдп рд╕рд╛рд╣рд┐рддреНрдп рдФрд░ рд╕рдорд╛рдЬ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХреБрдЫ рд╣рдж рддрдХ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИред рд░реЙрдм рдиреЗ рдЦреБрдж рдХрд┐рд╕реА рднреА рд░рди рд╕реНрдЯреЛрди рдХреЛ рд╣рд╛рде рд╕реЗ рдирд╣реАрдВ рдорд╛рд░рд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЙрд╕рдХреЗ рдкрд╛рд╕ рдпрд╣ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдпреЛрдЧреНрдпрддрд╛рдПрдВ рд╣реИрдВ рдХрд┐ рдПрдХ рд░рди рдХреНрдпрд╛ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рд╡рд╣ рдЦреБрдж рд░реВрдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦ рдпрд╛ рдкрдврд╝ рднреА рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░рд╛ рдЕрдиреБрдорд╛рди рд╣реИред рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд╣ рдЙрд╕ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдХрдбрд╝ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╣ рдЕрдВрджрд░ рдирд╣реАрдВ рдЖ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХрд╣ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЪреАрдиреА рдЪрд░рд┐рддреНрд░, рдЕрд░рдмреА рд▓реЗрдЦрди рдпрд╛ рд╣рдВрдЧреБрд▓ рдпрд╛ рд╕реНрдорд╛рдЗрд▓реА рдЪреЗрд╣рд░рд╛ рдПрдХ рд░реВрдг рд╣реИ рдпрд╛ рдЬреЛ рдХреБрдЫ рднреА "рдХреЛрдб рдкреНрд╡рд╛рдЗрдВрдЯ" рд╣реИ рд╡рд╣ рдЕрдм рдПрдХ рд░реВрдг рд╣реИ, рдпрд╛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХрд╛ред рдпрд╣ рд▓рдЧрднрдЧ рдЕрдкрдорд╛рдирдЬрдирдХ рд░реВрдк рд╕реЗ рдЗрд╕ рд╢рдмреНрдж рдХреЛ рд░реМрдВрджрддрд╛ рд╣реБрдЖ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рджреЗрдЦреЛ, рдЕрдм рд╕рдм рдХреБрдЫ рдПрдХ рд░реВрдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ, рд░рди рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХреБрдЫ рдЧреВрдврд╝ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд╛рд░ рдЕрдХреНрд╖рд░ рд╡рд╛рд▓реЗ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рд╢рдмреНрдж рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдФрд░ рдХреБрдЫ рдирд╣реАрдВ рд╣реИрдВред

рд░реВрдг рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЧреНрд▓рд┐рдлрд╝ рд╣реИ рдЬрд┐рд╕реЗ рд╡рд┐рдбрдВрдмрдирд╛ рд╕реЗ рдпреВрдирд┐рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд░реВрдирд┐рдХ рдпреВрдирд┐рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд░реВрдг рдирд╣реАрдВ рд╣реИ

рдпреВрдирд┐рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдПрдХ рд░реВрдг рдпрд╛ рд░реВрдирд┐рдХ рдХреНрдпрд╛ рд╣реИред рдпрджрд┐ рд╡реЗ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рдЕрдкрдиреЗ рдЬрдирд╛рджреЗрд╢ рд╕реЗ рдЖрдЧреЗ рдмрдврд╝ рд░рд╣реЗ рд╣реИрдВред рдЙрдирдХреЗ рдкрд╛рд╕ рдЬрдирддрд╛ рдХреЛ рдпрд╣ рдмрддрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рдо рдирд╣реАрдВ рд╣реИ рдХрд┐ рд░реВрдг рдХреНрдпрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдирдХреЗ рдкрд╛рд╕ рдХрд┐рд╕реА рднреА рдирдИ рднрд╛рд╖рд╛ рдпрд╛ рдЪрд░рд┐рддреНрд░ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдИ рд╡реНрдпрд╡рд╕рд╛рдп рдирд╣реАрдВ рд╣реИред рд╡реЗ рдХреЗрд╡рд▓ рдПрдХ рдРрд╕реЗ рд╢рдмреНрдж рдХреЛ рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╣рдЬрд╛рд░ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрддрд┐рднрд╛рд░рд┐рдд рд╢рдмреНрдж рд╣реИ рдФрд░ рдлрд┐рд░ рдЬрдпрдХрд╛рд░реЗ рд▓рдЧрд╛рддреЗ рд╣реБрдП рдРрд╕реЗ рджреМрдбрд╝рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдХ рдирдИ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рд╣реЛред рд░реВрдирд┐рдХ рд▓реЗрдЦрди рдореЗрдВ рдХреЗрд╡рд▓ рд░рди рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рд░рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╕реНрдерд╛рдкрд┐рдд рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд╕рдбрд╝рдХ рдкрд░ рдХрд┐рд╕реА рдмреЗрддрд░рддреАрдм рд╡реНрдпрдХреНрддрд┐ рд╕реЗ рдкреВрдЫрддреЗ рд╣реИрдВ рдХрд┐ рд░рди рдХреНрдпрд╛ рд╣реИ рддреЛ рд╡реЗ рдпреВрдирд┐рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪреЗрдВрдЧреЗред

рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд░реВрдг рдПрдХ рдЦрд░рд╛рдм рд░реВрдкрдХ рд╣реИ рдЬреЛ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдпрд╣ рдХреБрдЫ рднреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рднреНрд░рдо рдХрд╛ рдПрдХ рдФрд░ рд╕реНрддрд░ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рд╡рд┐рд╖рдп рдХреЗ рдХрд┐рд╕реА рднреА рдирд╡рд╛рдЧрдВрддреБрдХ рдХреЛ рдЕрдм рд╕реНрдкрд╖реНрдЯ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдФрд░ рдкрдврд╝рдиреЗ рдХреЗ рджреМрд░ рд╕реЗ рдЧреБрдЬрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рд░ рдХреЛрдИ рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЖрддрд╛ рд╣реИ рдХрд┐ рд░реВрдг рдПрдХ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд▓реЗрдЦрди рдкреНрд░рдгрд╛рд▓реА рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреБрдЫ рд╕рдВрд╕реНрдХреГрддрд┐рдпреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛: "рдПрдХ рд░реВрдг рдПрдХ рдпреВрдирд┐рдХреЛрдб рдХреЛрдб рдмрд┐рдВрджреБ рд╣реИ"ред "рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдХреЛрдб рдкреЙрдЗрдВрдЯ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд╣рддреЗ?" "рдареАрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╣реИред", рдпрд╛ "рдХрд┐рд╕реА рдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рджреМрдбрд╝рдирд╛ рдкрд╕рдВрдж рд╣реИ"ред рддреЛ рдореВрд▓ рд░реВрдк рд╕реЗ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рд╕реЛрдЪрддрд╛ рд╣реИ рдХрд┐ 9 рдЕрдХреНрд╖рд░ 4 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИрдВ (рднрд▓реЗ рд╣реА рдЙрдирдХреЗ рдкрд╛рд╕ Intellisense рдХреЗ рд╕рд╛рде рд╕реНрд╡рдд: рдкреВрд░реНрдг рд╣реИ рдФрд░ рдЬрд╛рд╡рд╛ рдХрд┐рдВрдЧрдбрдо рдСрдл рдиреЛрдиреНрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ), рдЕрдм рд╣рдореЗрдВ рдЗрд╕ рднреНрд░рдо рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ рд╣рдЬрд╛рд░реЛрдВ рдХреЛ рд╕рдордЭрд╛рдирд╛ рд╣реЛрдЧрд╛ рдЙрди рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЬрд┐рдиреНрд╣реЗрдВ рдпреВрдирд┐рдХреЛрдб рдореЗрдВ рдбрдм рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдХреЛрдб рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╢рдмреНрдж рдХреЛ рдЫреЛрдЯрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдПрдХ рдкреНрд░рдпреЛрдЧ рдХрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдпрд╣ рдпреВрдирд┐рдХреЛрдбрдХреЛрдбрдкреЙрдЗрдВрдЯ рд╣реЛрдирд╛ рдЬрд░реВрд░реА рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдХреЛрдбрдкреЙрдЗрдВрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрджреНрд╡рд┐рддреАрдп рд╣реИред рдРрд╕реЗ рдХрдИ рдПрдкреАрдЖрдИ рд╢рдмреНрдж рд╣реИрдВ рдЬреЛ "рдХреЛрдбрдкреЙрдЗрдВрдЯ" рд╕реЗ рдЕрдзрд┐рдХ рд▓рдВрдмреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЕрднреА рднреА рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╣реИ, рддреЛ рдмрд╕ рдХреБрдЫ рд╕рдВрдХреНрд╖реЗрдк рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рдпреЛрдЧ рдХрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрди рдЧреЛрдЪрд╛ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдмрди рдЧрдпрд╛ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдореВрд▓реНрдп рдирд╣реАрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдпрд╛ рдЙрдкрдпреЛрдЧреА рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдореЗрдВ рддрд╛рд░реНрдХрд┐рдХ рдЖрдзрд╛рд░ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВред рдХрдо рд╕реЗ рдХрдо рд░реВрдкрдХ "рдореАрд▓ рдХрд╛ рдкрддреНрдерд░" рдХреЗ рд▓рд┐рдП, рдЬрдмрдХрд┐ рд╣рдо рдкрддреНрдерд░ рдФрд░ рдЪрдЯреНрдЯрд╛рди рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рд╢рдмреНрджреЛрдВ рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рд╣реИрдВ, рдПрдХ рдореАрд▓ рдХрд╛ рдкрддреНрдерд░ рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд░реНрдгрдирд╛рддреНрдордХ рдЕрд░реНрде рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рддреБрд░рдВрдд рдПрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рд╕рдВрдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рд╣рд░ рдХреЛрдИ рдкрд░рд┐рдЪрд┐рдд рд╣реИред рдЕрд╣рд╛, рдПрдХ рдореАрд▓ рдХрд╛ рдкрддреНрдерд░, рдЬреИрд╕реЗ рдЬрдм рдЖрдк рдПрдХ рд▓рдВрдмреА рдпрд╛рддреНрд░рд╛ рдкрд░ рд╣реЛрдВ рдФрд░ рдЖрдк рдкрдЧрдбрдВрдбреА рдкрд░ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реЛрдВред рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рд╢реНрд╡ рд░реВрдкрдХ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдФрд░ рддреБрд░рдВрдд рдкреНрд░рдмрдВрдзрдХреАрдп рднрд╛рд╖рд╛ рдмрди рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдХрд▓реНрдкрдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХрд┐ рд▓реЛрдЧ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд░рдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рд╡реЗ рдЗрд╕ рд╡рд┐рд╖рдп рд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рдкрд░рд┐рдЪрд┐рдд рди рд╣реЛрдВ, рдЬрд┐рд╕ рдмрд┐рдВрджреБ рдкрд░ рдЙрдиреНрд╣реЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрддрд╛ рдЪрд▓ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдпрд╣ рдХреЛрдб рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдПрдХ рдиреМрдЯрдВрдХреА рд╢рдмреНрдж рд╣реИред

рдПрдХ рдмреЗрд╣рддрд░ рд╢рдмреНрдж рдЧреНрд▓рд┐рдлрд╝ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЯрд╛рдЗрдкреЛрдЧреНрд░рд╛рдлреА рдореЗрдВ рдПрдХ рдореМрд▓рд┐рдХ рдкреНрд░рддреАрдХ рдХреА рд╕рд╛рдорд╛рдиреНрдп рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ "рдЧреНрд▓рд┐рдлрд╝" рдПрдХ рдкреНрд░рдпреБрдХреНрдд рд╢рдмреНрдж рд╣реИ рдЬрдм рдпреВрдирд┐рдХреЛрдб рдХреЛ рджреГрд╢реНрдпрдорд╛рди рдкрд╛рда рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╕реЗ: utf8everywhere.org)

рддрд░реНрдХ рдХреА рд╡рд╣ рдкрдВрдХреНрддрд┐ рдпрд╛ рддреЛ рд░реВрдг рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпреВрдирд┐рдХреЛрдб рдпрд╛ рдЯреНрд░рд╛рдВрдЬрд┐рд╕реНрдЯрд░ рдпрд╛ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдпрд╛ рдУрдкрди рд╕реЛрд░реНрд╕ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рдЖрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, "рд░реВрди" рдкреВрд░реЗ рдЗрддрд┐рд╣рд╛рд╕ рдореЗрдВ рдПрдХ рд╣рдЬрд╛рд░ рд╕рд╛рд▓ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╢рдмреНрдж рд░рд╣рд╛ рд╣реИред

рдореЗрд░рд╛ рдХрд╣рдирд╛ рдерд╛ рдХрд┐ рд╢рдмреНрдж "рдЧреНрд▓рд┐рдлрд╝" рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд╛рда рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдореЗрдВ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдпрд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдлрд╝реЙрдиреНрдЯ рдореЗрдВ рдЙрд╕ рдЪрд░рд┐рддреНрд░ рдХрд╛ рдЪрд┐рддреНрд░рдордп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реИред рддреЛ рдПрдХ рдЪрд░рд┐рддреНрд░ рдХреЛ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЧреНрд▓рд┐рдлрд╝ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

... рдлрд┐рд░ рд╕реЗ @benadams рдХреЗ рд╕рд╛рде рдЪреАрдЬреЛрдВ рдХреЗ 10,000 рдореАрдЯрд░ рджреГрд╢реНрдп рдФрд░ рд╕рд╣реА рдЙрддреНрддрд░ ЁЯШБ

рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рд╣рдореЗрдВ рдкреБрд░рд╛рдиреА рдХрд╣рд╛рд╡рдд рдХреЗ рд╕рд╛рде рд░рд╣рдирд╛ рд╣реЛрдЧрд╛: "рдЖрдк рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреЛ рд╣рд░ рд╕рдордп рдЦреБрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╕рднреА рд▓реЛрдЧреЛрдВ рдХреЛ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЦреБрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рд╕рднреА рд▓реЛрдЧреЛрдВ рдХреЛ рдЦреБрд╢ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдордпред" рдпрд╣ рдмрд╣реБрдд рдкрд╣рд▓реЗ рдХреА рд╕реНрдерд┐рддрд┐ рд╣реИред

рд╕рд┐рдЧрд┐рд▓?

Exit, pursued by a bear.

рдХрд┐рд╕реА рдРрд╕реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛ рдЗрд╕ рдПрдкреАрдЖрдИ рдХрд╛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рдореИрдВ рдХреЛрдб рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рдПрдХ рдордЬрдмреВрдд рд╡реЛрдЯ рдбрд╛рд▓ рд░рд╣рд╛ рд╣реВрдВред рдпреВрдирд┐рдХреЛрдб рд╢рдмреНрджрд╛рд╡рд▓реА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдлреА рднреНрд░рдорд┐рдд рдХрд░ рд░рд╣реА рд╣реИ, рдФрд░ рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд╛рдЬрд┐рдореА рд╣реИрдВред рдЕрдЧрд░ рдореИрдВ рд╣рд░ рдЬрдЧрд╣ рд╕рд┐рд░реНрдл "рдХреЛрдб рдкреЙрдЗрдВрдЯ" рдХрд╣реВрдВ рддреЛ рдЖрдк рдореЗрд░реЗ рдЬреАрд╡рди рдХреЛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдмрдирд╛ рджреЗрдВрдЧреЗред

рдореИрдВ рдЕрднреА рдмрд┐рд╕реНрддрд░ рдкрд░ рд▓реЗрдЯрд╛ рд╣реВрдБред рдЕрдЧрд░ рдореИрдВ рдмрдЧрд╝рд▓ рдореЗрдВ рдореБрдбрд╝рддрд╛ рд╣реВрдБ, рддреЛ рдореБрдЭреЗ рдореЗрд░реА рджреАрд╡рд╛рд░ рдХреЗ рд╕рд╛рдордиреЗ рдПрдХ рд╡реНрд╣рд╛рдЗрдЯрдмреЛрд░реНрдб рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдорд╣реАрдиреЛрдВ рдХреЗ рд▓рд┐рдП, рд╡рд╣ рд╡реНрд╣рд╛рдЗрдЯрдмреЛрд░реНрдб рд╡рд┐рднрд┐рдиреНрди рд╕реНрдХреНрд░рд┐рдмрд▓реНрд╕ рдФрд░ рдЪрд╛рд░реНрдЯреНрд╕ рдХрд╛ рдШрд░ рд░рд╣рд╛ рд╣реИ, рдЬрдмрдХрд┐ рдореИрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд╕реА # рдореЗрдВ рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЖрдИрдбреАрдПрди рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯреЗрдВред рдореИрдВ рдЗрд╕реЗ рдПрдХ рдЕрд╡рд╢реЗрд╖ рдХреА рддрд░рд╣ рдорд╛рдирддрд╛ рд╣реВрдВ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдирд░рдХ рдХреА рдЧрд╣рд░рд╛рдИ рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рд╣реИред рдЕрдЧрд░ рдореИрдВ рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рддрд░реНрдХ рдХреЛ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛, рддреЛ рдореИрдВ рдирд╣реАрдВ рдХрд░ рдкрд╛рддрд╛ред

рдХреГрдкрдпрд╛, рдореЗрд░реЗ рдЬреАрд╡рди рдХреЛ рдХрдард┐рди рдордд рдмрдирд╛рдУред рдПрдХ рдХреЛрдб рдмрд┐рдВрджреБ рдПрдХ рдХреЛрдб рдмрд┐рдВрджреБ рд╣реИред рдпрд╣ рдПрдХ рд░реВрдг, рдЧреНрд▓рд┐рдлрд╝, рдЪрд░рд┐рддреНрд░, рдЕрдВрдЧреВрд░, рдпрд╛ рдкреНрд░рддреАрдХ рднреА рдирд╣реАрдВ рд╣реИред рдЗрд╕реЗ рдорд╛рдирд╡ рдХреЗ рд▓рд┐рдП рд╕рд╛рд░реНрдердХ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рдпрд╣ рдПрдХ рдирд┐рдпрдВрддреНрд░рдг рдХреЛрдб рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рджреГрд╢реНрдп рдкреНрд░рддреАрдХ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ "рд░рди" рдирд╛рдо рдХрд╛ рдЕрд░реНрде рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдХреЛрдб рдмрд┐рдВрджреБ рд╣реИред

рдПрдХ рдЕрдзрд┐рдХ рдареЛрд╕ рддрд░реНрдХ рдпрд╣ рд╣реИ рдХрд┐ "рд░рди" рдХрд╛ рдЕрд░реНрде рдПрдХ рдПрдХрд▓ рдЕрдВрдЧреВрд░ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реИ, рдЬреЛ рдЕрдХреНрд╕рд░ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЕрдЧрд░ рдореИрдВ рдХреЛрдб рдмрд┐рдВрджреБрдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЕрдВрдЧреВрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рджреЛ рдмрд╣реБрдд рдЕрд▓рдЧ рд╕рдВрдЦреНрдпрд╛рдПрдВ рдорд┐рд▓ рд╕рдХрддреА рд╣реИрдВред рдЧреНрд░реИрдлреЗрдо рдХреЗ рд╕рдорд╛рди рдЕрдиреБрдХреНрд░рдо рдХреЛ рдХреЛрдб рдмрд┐рдВрджреБрдУрдВ рдХреА рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╢реНрд░реГрдВрдЦрд▓рд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдПрдХ рдмреЗрд╣рддрд░ рд╢рдмреНрдж рдЧреНрд▓рд┐рдлрд╝ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЯрд╛рдЗрдкреЛрдЧреНрд░рд╛рдлреА рдореЗрдВ рдПрдХ рдореМрд▓рд┐рдХ рдкреНрд░рддреАрдХ рдХреА рд╕рд╛рдорд╛рдиреНрдп рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рддреЛ рдФрд░ рднреА рдмреБрд░рд╛ рд╣реИред рдПрдХ рдПрдХрд▓ рдХреЛрдб рдмрд┐рдВрджреБ рдХреЛ рдХрдИ рдЧреНрд▓рд┐рдлрд╝ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдПрдХрд▓ рдЧреНрд▓рд┐рдлрд╝ рдХрдИ рдХреЛрдб рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╕рдЯреАрдХ рдореИрдкрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо, рдкреНрд░реЛрдЧреНрд░рд╛рдо, рдЯрд╛рдЗрдкрдлреЗрд╕ рджреНрд╡рд╛рд░рд╛ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИ ...

рдЗрди рд╕рднреА рд╢рдмреНрджреЛрдВ рдХреЗ рдмрд╣реБрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрдХрдиреАрдХреА рдЕрд░реНрде рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдорддрднреЗрдж рдорд╣рддреНрд╡рд╣реАрди рд▓рдЧ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдгрд╛рдо рдХрд╣реАрдВ рдФрд░ рд╣реИрдВ, рдЦрд╛рд╕рдХрд░ рдЕрдВрдЧреНрд░реЗрдЬреА рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВред

рдЬрд░реНрдорди рдЬреИрд╕реА рд╕рд╛рдорд╛рдиреНрдп рднрд╛рд╖рд╛ рдореЗрдВ рднреА, рдкрд╛рда рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдХрд┐рддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ:

  1. ├Я рдХреЛ рдЕрдкрд░рдХреЗрд╕ рдореЗрдВ рдмрджрд▓реЗрдВ рдФрд░ рдЖрдкрдХреЛ SS рдорд┐рд▓реЗрдЧрд╛ред
  2. рдЗрд╕реЗ рд╡рд╛рдкрд╕ рд▓реЛрдЕрд░рдХреЗрд╕ рдореЗрдВ рдмрджрд▓реЗрдВ рдФрд░ рдЖрдкрдХреЛ ss рдорд┐рд▓реЗрдЧрд╛ред

рд╕рдорд╕реНрдпрд╛:

  • char.ToUpper('├Я') рдХреНрдпрд╛ рд▓реМрдЯрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? (рдЗрд╕реЗ рдПрдХ рд╕рд┐рдВрдЧрд▓ рдЪрд╛рд░ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред)
  • рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд┐рд╕реЗ рдореЗрд░рд╛ рдлрд╝реЛрди рдЗрд╕ рдЯреЗрдХреНрд╕реНрдЯ рдмреЙрдХреНрд╕ рдореЗрдВ рджрд░реНрдЬ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдХреЛ рдпреВрдирд┐рдХреЛрдб 5.1 рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рдкреЗрд╕реНрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдПрд╕рдПрд╕ рдорд┐рд▓рддрд╛ рд╣реИред рдЕрдм рдКрдкрд░реА/рдирд┐рдЪрд▓реЗ рд░реВрдкрд╛рдВрддрд░рдг рдФрд░ рднреА рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИрдВред
  • рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдЖрд╡рд░рдг рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ рдЗрд╕рдХреА рд▓рдВрдмрд╛рдИ рдмрджрд▓ рдЬрд╛рддреА рд╣реИред
  • рдХреЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдирд┐рд╖реНрдХреНрд░рд┐рдп рдпрд╛ рдкреНрд░рддрд┐рд╡рд░реНрддреА рдирд╣реАрдВ рд╣реИрдВред
  • рдЖрдк рдХреЗрд╡рд▓ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдХрдо рдХрд░рдХреЗ рдХреЗрд╕-рдЕрд╕рдВрд╡реЗрджрдирд╢реАрд▓ рддреБрд▓рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред

рднрд▓реЗ рд╣реА рдпрд╣ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдХрд╛ рдкреНрд░рддреНрдпрдХреНрд╖ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╢рдмреНрджрд╛рд╡рд▓реА рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░рддреА рд╣реИ, рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рддрд░рд╣ рдХреЗ рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рдЖрдо рддреМрд░ рдкрд░ рдирд╣реАрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ, рд╕реБрд╕рдВрдЧрдд рдЕрд░реНрде рджреЗрдиреЗ рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реНрд╕ рдХреЛ рдЗрди рдореБрджреНрджреЛрдВ рдХреЛ рд╕рдВрдкреНрд░реЗрд╖рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓рддреА рд╣реИред рдЕрдЧрд░ рдореИрдВ рдПрдХ рдЯреАрдо рдХреЗ рд╕рд╛рдереА рдХреЛ рдЕрдВрдЧреВрд░реЛрдВ рдХреА рдЧрд┐рдирддреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рд░реЛрд╣ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реВрдВ, рддреЛ рд╡реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдЧрд┐рдирдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред рдЕрдЧрд░ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рдХреЛрдб рдЕрдВрдХ рдЧрд┐рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реВрдВ, рддреЛ рд╡реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред рдпреЗ рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ рдЙрди рднрд╛рд╖рд╛рдУрдВ рдФрд░ рддрдХрдиреАрдХреЛрдВ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдЕрдЧрд░ рдореИрдВ рдХрд┐рд╕реА JavaScript рдбреЗрд╡рд▓рдкрд░ рд╕реЗ рд░рдиреЛрдВ рдХреА рдЧрд┐рдирддреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реВрдВ, рддреЛ рд╡реЗ рдореБрдЭреЗ рдРрд╕реЗ рджреЗрдЦреЗрдВрдЧреЗ рдЬреИрд╕реЗ рдореЗрд░реЗ рддреАрди рд╕рд┐рд░ рд╣реИрдВред

рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдХрд╣рддрд╛ рд╣реИ

рдпреВрдирд┐рдХреЛрдб 0hex рд╕реЗ 10FFFFhex . рдХреА рд╕реАрдорд╛ рдореЗрдВ 1,114,112 рдХреЛрдб рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдХреЛрдбрд╕реНрдкреЗрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ

рдХреЛрдб рдмрд┐рдВрджреБ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдирд╛рдо рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдпрд╣ рдзрд╛рдЧрд╛ рдкрдврд╝рд╛ рд╣реИ рдФрд░ рдХреЛрдб рдмрд┐рдВрджреБ рдЧрд▓рдд рдХреНрдпреЛрдВ рд╣реЛрдЧрд╛, рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЬрдмрд░рджрд╕реНрдд рддрд░реНрдХ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИред

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдХреЛрдб рдмрд┐рдВрджреБ рдпрд╣рд╛рдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╢рдмреНрдж рдирд╣реАрдВ рд╣реИред рдХрдо рд╕реЗ рдХрдо, рдпреВрдирд┐рдХреЛрдб рдорд╛рдирдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрд╕рдореЗрдВ 10FFFF (http://unicode.org/glossary/#code_point) рд╕реЗ рдКрдкрд░ рдХреЗ рдорд╛рди рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВред

рд╢рд╛рдпрдж рд╡рд╣ рд╡рд╛рдХреНрдп рдЧрд▓рдд рд╣реИ? рдпрд╣ рдХрд╣рддрд╛ рд╣реИ "рдХреЛрдб рд╕реНрдерд╛рди рдореЗрдВ рдХреЛрдИ рднреА рдореВрд▓реНрдп"ред рддреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдм рдХреБрдЫ рд╣реИ рдЬрдмрдХрд┐ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдкреВрд░реНрдгрд╛рдВрдХ рдЧрд▓рдд рд╣реЛ рд░рд╣рд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, "рд░рди" рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдЕрд░реНрде рд╣реИ рдЬрд┐рд╕рдХрд╛ рдпреВрдирд┐рдХреЛрдб рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИред рдЬрд░реНрдордиреА рдореЗрдВ, "рд░реВрдг" рд╢рдмреНрдж рдХрд╛ рдирд╛рдЬреА рдЕрд░реНрде рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд░рдиреЛрдВ рдХрд╛ "рдЬрд░реНрдордирд┐рдХ" рдЗрддрд┐рд╣рд╛рд╕ рд╣реИ рдЬрд┐рд╕реЗ рдирд╛рдЬрд┐рдпреЛрдВ рдиреЗ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд┐рдпрд╛ рдерд╛ред

рдореБрдЭреЗ "рд░рди" рдПрдХ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдирд╛рдо рд▓рдЧрддрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣рд╛рдВ рдХрд┐рд╕реА рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "рд░рди" рдкрд╕рдВрдж рд╣реИ рдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рд╢реБрджреНрдзрддрд╛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВред рд╕рд╣рдЬ рд░реВрдк рд╕реЗ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдмреБрд░рд╛ рдирд╛рдо рд╣реИред

рд╢рд╛рдпрдж рд╡рд╣ рд╡рд╛рдХреНрдп рдЧрд▓рдд рд╣реИ? рдпрд╣ рдХрд╣рддрд╛ рд╣реИ "рдХреЛрдб рд╕реНрдерд╛рди рдореЗрдВ рдХреЛрдИ рднреА рдореВрд▓реНрдп"ред рддреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдм рдХреБрдЫ рд╣реИ рдЬрдмрдХрд┐ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдкреВрд░реНрдгрд╛рдВрдХ рдЧрд▓рдд рд╣реЛ рд░рд╣рд╛ рд╣реИред

рд╡рд╣ рд╡рд╛рдХреНрдп рд╕рд╣реА рд╣реИред рдХреЛрдб рд╕реНрдерд╛рди U+0000 рд╕реЗ U+10FFFF рддрдХ рд╣реИред рдпреВрдирд┐рдХреЛрдб рдХреЛ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рджрд┐рди рдЖрдЧреЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдпреВрдЯреАрдПрдл -8 рдФрд░ рдпреВрдЯреАрдПрдл -16 рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛ред рд╣рдореЗрдВ рдирдП рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЕрд╕рд▓ рдореЗрдВ, рдореБрдЭреЗ рдпреВрдЯреАрдПрдл -16 рдЯреВрдЯрдиреЗ рдкрд░ рдЙрджреНрдзрд░рдг рди рджреЗрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рдпрд╣ рдпреВрдЯреАрдПрдл -8 рддреЛрдбрд╝ рджреЗрдЧрд╛ред UTF-8 рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ 0xFFFFFF (2^24 -1) рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред

2 рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпреВрдирд┐рдХреЛрдб рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдмрд┐рдВрджреБ рдХрднреА рднреА U+10FFFF рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ 0x110000 рдХреЛрдб рдмрд┐рдВрджреБ рд╣реИрдВ - рдЙрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрддрд░ рдХреЛрдб рдмрд┐рдВрджреБ рдЕрд╕рд╛рдЗрди рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВред

@рдЬрд╝реЗрдиреЗрдХреНрд╕рд░ @ рдЬреАрдПрд╕рдкреАрдкреА

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдорд╛рд╕реНрдЯрд░ ( System.Text.Rune ) рдореЗрдВ рдЪреЗрдХ рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ "рдпреВрдирд┐рдХреЛрдб рд╕реНрдХреЗрд▓рд░ рд╡реИрд▓реНрдпреВ" ( рд╢рдмреНрджрд╛рд╡рд▓реА рджреЗрдЦреЗрдВ ) рдХреЗ рд▓рд┐рдП рдореИрдк рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ -1 , 0xD800 , рдпрд╛ 0x110000 рдорд╛рдиреЛрдВ рд╕реЗ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ ctors рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджреЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рдпреВрдирд┐рдХреЛрдб рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕реНрдХреЗрд▓рд░ рдорд╛рди рдирд╣реАрдВ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЕрдкрдиреА рд╡рд┐рдзрд┐ рдореЗрдВ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ Rune рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЙрд╕ рдкрд░ рдХреЛрдИ рд╕рддреНрдпрд╛рдкрди рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдиреЗ рдкрд╣рд▓реЗ рд╣реА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдПрдХ рд╡реИрдз рд╕реНрдХреЗрд▓рд░ рдорд╛рди рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдкреБрди:: рдХреЗрд╕ рд░реВрдкрд╛рдВрддрд░рдг, .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рд╕рднреА рдХреЗрд╕ рд░реВрдкрд╛рдВрддрд░рдг рдПрдкреАрдЖрдИ _рдЬрдм рддрдХ рдЕрдиреНрдпрдерд╛ рдиреЛрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛_ рд╕рд╛рдзрд╛рд░рдг рдХреЗрд╕ рдлреЛрд▓реНрдбрд┐рдВрдЧ рдирд╛рдордХ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╕рд╛рдзрд╛рд░рдг рдХреЗрд╕ рдлреЛрд▓реНрдбрд┐рдВрдЧ рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЗ рддрд╣рдд, рдХрд┐рд╕реА рднреА рдЗрдирдкреБрдЯ рд╕реНрдХреЗрд▓рд░ рд╡реИрд▓реНрдпреВ рдХреЗ рд▓рд┐рдП, рдЖрдЙрдЯрдкреБрдЯ рд▓реЛрдЕрд░рдХреЗрд╕, рдЕрдкрд░рдХреЗрд╕ рдФрд░ рдЯрд╛рдЗрдЯрд▓рдХреЗрд╕ рдлреЙрд░реНрдо рднреА рдкреНрд░рддреНрдпреЗрдХ рдПрдХ рд╕реНрдХреЗрд▓рд░ рд╡реИрд▓реНрдпреВ рд╣реЛрдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддреЗ рд╣реИрдВред (рдХреБрдЫ рдЗрдирдкреБрдЯ, рдЬреИрд╕реЗ рдЕрдВрдХ 0-9 рдпрд╛ рд╡рд┐рд░рд╛рдо рдЪрд┐рд╣реНрди, рдореЗрдВ рдХреЗрд╕ рд░реВрдкрд╛рдВрддрд░рдг рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВред рдЗрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ _ToUpper_ рдЬреИрд╕реЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗрд╡рд▓ рдЗрдирдкреБрдЯ рд╕реНрдХреЗрд▓рд░ рдорд╛рди рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред) рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рд╕рд╛рдзрд╛рд░рдг рдХреЗрд╕ рдлреЛрд▓реНрдбрд┐рдВрдЧ рдирд┐рдпрдореЛрдВ рдХреЗ рддрд╣рдд рдпрджрд┐ рдЗрдирдкреБрдЯ рд╣реИ рдмреЗрд╕рд┐рдХ рдмрд╣реБрднрд╛рд╖реА рд╡рд┐рдорд╛рди (рдмреАрдПрдордкреА) рдореЗрдВ, рддреЛ рдЖрдЙрдЯрдкреБрдЯ рднреА рдмреАрдПрдордкреА рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП; рдФрд░ рдпрджрд┐ рдЗрдирдкреБрдЯ рдПрдХ рдкреВрд░рдХ рд╡рд┐рдорд╛рди рдореЗрдВ рд╣реИ, рддреЛ рдЖрдЙрдЯрдкреБрдЯ рднреА рдПрдХ рдкреВрд░рдХ рд╡рд┐рдорд╛рди рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕рдХреЗ рдХреБрдЫ рдкрд░рд┐рдгрд╛рдо рд╣реЛрддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, Rune.ToUpper рдФрд░ рджреЛрд╕реНрдд рд╣рдореЗрд╢рд╛ рдПрдХ _Rune_ (рд╕реНрдХреЗрд▓рд░) рдорд╛рди рд▓реМрдЯрд╛рдПрдВрдЧреЗред рджреВрд╕рд░рд╛, String.ToUpper рдФрд░ рджреЛрд╕реНрдд рд╣рдореЗрд╢рд╛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЙрд╕рдХреЗ рдЗрдирдкреБрдЯ рдХреЗ рд╕рдорд╛рди рд▓рдВрдмрд╛рдИ рдХреЗ рд╕рд╛рде рд▓реМрдЯрд╛рдПрдВрдЧреЗред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдХреЗрд╕ рд░реВрдкрд╛рдВрддрд░рдг рдСрдкрд░реЗрд╢рди рдХреЗ рдмрд╛рдж '├Я' (рдорд┐рдиреАрд╕реНрдХреНрдпреВрд▓ рдПрд╕реНрдЬрд╝реЗрдЯ) рдпреБрдХреНрдд рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЬрд╛ рд░рд╣реА рд╕рдВрд╕реНрдХреГрддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ '├Я' (рдХреЛрдИ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ) рдпрд╛ 'с║Ю' (majuscule eszett) рдпреБрдХреНрдд рд╣реЛ рд╕рдХрддреА рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ "рдПрд╕рдПрд╕" рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд▓рдВрдмрд╛рдИ рдмрджрд▓ рдЬрд╛рдПрдЧреА, рдФрд░ рд▓рдЧрднрдЧ рд╕рднреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдЙрдЬрд╛рдЧрд░ .NET рдХреЗрд╕ рд░реВрдкрд╛рдВрддрд░рдг рдПрдкреАрдЖрдИ рд╕рд░рд▓ рдХреЗрд╕ рдлреЛрд▓реНрдбрд┐рдВрдЧ рдирд┐рдпрдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рддреАрд╕рд░рд╛, Utf8String.ToUpper рдФрд░ рджреЛрд╕реНрддреЛрдВ (рдЕрднреА рддрдХ рдЪреЗрдХ рдЗрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛) рдХреЛ _not_ рдПрдХ рдорд╛рди рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реИ рдЬрд┐рд╕рдХреА _Length_ рд╕рдВрдкрддреНрддрд┐ рдЗрдирдкреБрдЯ рдорд╛рди рдХреА _Length_ рд╕рдВрдкрддреНрддрд┐ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред (рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ UTF-16 рдХреЛрдб рдЗрдХрд╛рдЗрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕рд╛рдзрд╛рд░рдг рдХреЗрд╕ рдлреЛрд▓реНрдбрд┐рдВрдЧ рдХреЗ рдмрд╛рдж рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ UTF-8 рдХреЛрдб рдЗрдХрд╛рдЗрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрджрд▓ рд╕рдХрддреА рд╣реИред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ UTF-16 рдФрд░ UTF рджреНрд╡рд╛рд░рд╛ BMP рдорд╛рди рдХреИрд╕реЗ рдПрдиреНрдХреЛрдб рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ- 8.)

рдХреБрдЫ .NET API рд╣реИрдВ рдЬреЛ рд╕рд╛рдзрд╛рд░рдг рдХреЗрд╕ рдлреЛрд▓реНрдбрд┐рдВрдЧ рдирд┐рдпрдореЛрдВ рдХреЗ рдмрдЬрд╛рдп рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЬрдЯрд┐рд▓ рдХреЗрд╕ рдлреЛрд▓реНрдбрд┐рдВрдЧ рдирд┐рдпрдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред String.Equals , String.IndexOf , String.Contains , рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рд╕рдВрд╕реНрдХреГрддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд╡рд░ рдХреЗ рддрд╣рдд рдЬрдЯрд┐рд▓ рдХреЗрд╕ рдлреЛрд▓реНрдбрд┐рдВрдЧ рдирд┐рдпрдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдХреА рд╕рдВрд╕реНрдХреГрддрд┐ _de-DE_ рдкрд░ рд╕реЗрдЯ рд╣реИ, рддреЛ рдпрджрд┐ рдЖрдк _CurrentCultureIgnoreCase_ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ-рд╡рд░реНрдг рд╡рд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ "├Я" рдФрд░ рджреЛ-рд╡рд░реНрдг рд╡рд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ "SS" рдХреА рддреБрд▓рдирд╛ рдмрд░рд╛рдмрд░ рд╣реЛрдЧреАред

@GrabYourPitchforks рдореИрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдирд╛рдо рдХреЗ рдЪреБрдирд╛рд╡ рдкрд░ рдЖрдкрддреНрддрд┐ рдЬрддрд╛ рд░рд╣рд╛ рд╣реВрдВред рдХреЗрд╕рдлреЛрд▓реНрдбрд┐рдВрдЧ рдЙрджрд╛рд╣рд░рдг рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЬреЛрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдерд╛ рдХрд┐ рдпреВрдирд┐рдХреЛрдб (рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдкрд╛рда) рдХрд┐рддрдирд╛ рдЬрдЯрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЬрдм рддрдХ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ, рдореБрдЭреЗ рдЗрд╕ рдмрд╛рдд рдХреА рдмрд╣реБрдд рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рд░рд▓ рдСрдкрд░реЗрд╢рди рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рд░ рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рдПрдирдПрдлрдХреЗрдбреА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рдКрдВрдЧрд╛ред

рд╡рд╣ рд╡рд╛рдХреНрдп рд╕рд╣реА рд╣реИред рдХреЛрдб рд╕реНрдерд╛рди U+0000 рд╕реЗ U+10FFFF рддрдХ рд╣реИред рдпреВрдирд┐рдХреЛрдб рдХреЛ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рджрд┐рди рдЖрдЧреЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдпреВрдЯреАрдПрдл -8 рдФрд░ рдпреВрдЯреАрдПрдл -16 рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛ред рд╣рдореЗрдВ рдирдП рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдмрд╕ рдирд╛рдЗрдЯрдкрд┐рдХрд┐рдВрдЧ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП (рдпрд╛, рдпрджрд┐ рд▓реЛрдЧ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ): рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпреВрдЯреАрдПрдл -8 рдПрд▓реНрдЧреЛрд░рд┐рджрдо 42 рдмрд┐рдЯреНрд╕ (рдЙрдкрд╕рд░реНрдЧ рдмрд╛рдЗрдЯ 0xFF рдФрд░ 6 рдмрд┐рдЯреНрд╕ рдкреЗрд▓реЛрдб рдХреЗ 7 рдмрд╛рдЗрдЯреНрд╕) рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдореВрд▓ рд░реВрдк рд╕реЗ, рдкрд╣рд▓реЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдиреЗ рдкреВрд░реНрдг 31 рдХреЛ рдХрд╡рд░ рдХрд┐рдпрд╛ рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рдХреИрд░реЗрдХреНрдЯрд░ рд╕реЗрдЯ (рдпреВрд╕реАрдПрд╕ 4) рдХреЗ рдЙрди рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА

UTF-16 рдХреЗ рд▓рд┐рдП, рд╕реНрдерд┐рддрд┐ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИред рд▓реЗрдХрд┐рди рд╡реЗ рдКрдкрд░реА рд╡рд┐рдорд╛рди рдореЗрдВ рдХреЛрдб рдмрд┐рдВрджреБрдУрдВ рдХреЛ 32 рдмрд┐рдЯ рдпрд╛ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рдХреЗ рд▓рд┐рдП "рдПрд╕реНрдХреЗрдк" рдХреЗ рд░реВрдк рдореЗрдВ рдЖрд░рдХреНрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рдереЗред рдЪреВрдВрдХрд┐ рд╡рд┐рдорд╛рди 3 рд╕реЗ 13 рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВ, рд╡реЗ рдЙрдирдореЗрдВ рд╕реЗ рджреЛ рдХреЛ "рд▓реЛ рд╕рд░реЛрдЧреЗрдЯ рдкреНрд▓реЗрди" рдФрд░ "рд╣рд╛рдИ рд╕рд░реЛрдЧреЗрдЯ рдкреНрд▓реЗрди" рдХреЗ рд░реВрдк рдореЗрдВ рдЖрд░рдХреНрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдлрд┐рд░ рдПрдХ 32 рдмрд┐рдЯ рдХреЛрдбрдкреЙрдЗрдВрдЯ рдХреЛ рджреЛ 16 рдмрд┐рдЯ рдорд╛рдиреЛрдВ (рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдорд╛рди рдореЗрдВ рдПрдХ) рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рди рдХреЛ рджреЛ "рдХреНрд▓рд╛рд╕рд┐рдХ" рд╕рд░реЛрдЧреЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдиреНрдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, 32 рдмрд┐рдЯ рдХреЛрдбрдкреЙрдЗрдВрдЯ рдХреЛ рдПрдиреНрдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ 16 рдмрд┐рдЯ рдХреА 4 рдХреЛрдб рдЗрдХрд╛рдЗрдпреЛрдВ рдХрд╛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ, рдПрдПрдлрдПрдЖрдИрд╕реАрдПрд╕, рдпреВрдирд┐рдХреЛрдб рдХрдВрд╕реЛрд░реНрдЯрд┐рдпрдо рдиреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдХрд╣рд╛ рд╣реИ рдХрд┐ рд╡реЗ рдХрднреА рднреА рдпреВ+10рдПрдлрдПрдлрдПрдлрдПрдл рд╕реЗ рдКрдкрд░ рдХреЛрдбрдкреЙрдЗрдВрдЯ рдЖрд╡рдВрдЯрд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореИрдВ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрдд рд╣реЛ рдЬрд╛рдКрдВрдЧрд╛ред :рдЖрдБрдЦ рдорд╛рд░рдирд╛:

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдорд╛рд╕реНрдЯрд░ ( System.Text.Rune ) рдореЗрдВ рдЪреЗрдХ рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ "рдпреВрдирд┐рдХреЛрдб рд╕реНрдХреЗрд▓рд░ рд╡реИрд▓реНрдпреВ" рдХреЗ рд▓рд┐рдП рдореИрдк рдХрд░рддрд╛ рд╣реИ

@GrabYourPitchforks рдЙрд╕ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕рдВрд░рдЪрдирд╛ рдПрдХ рдХреЛрдб рдмрд┐рдВрджреБ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рддреЛ рд╡рд╣ рдирд╛рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧрд▓рдд рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ UnicodeScalar рдПрдХ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╣реБрдд рд░рд╣рд╕реНрдпрдордп рд╣реИ ...

@GrabYourPitchforks , рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░рдирд╛ рдмрд╛рдХреА рд╣реИ?

@stephentoub 3.0 рдХреЗ рд▓рд┐рдП рдЗрди-рдмреЙрдХреНрд╕ Rune рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди @migueldeicaza рдХреЗ рдкрд╛рд╕ рдЧреНрд░реИрдлреЗрдо рдХреНрд▓рд╕реНрдЯрд░ рдЬреИрд╕реА рдЪреАрдЬрд╝реЛрдВ рд╕рд╣рд┐рдд, рдкреНрд░рдХрд╛рд░ рдХреА рдкрд╣реБрдВрдЪ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░ рдереЗред (рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрди-рдмреЙрдХреНрд╕ рд╕рдмрд╕реЗ рдирдЬрд╝рджреАрдХреА рдЪреАрдЬрд╝ рд╣реИ TextElementEnumerator , рдЬреЛ рдХрд┐ рдПрдХ рдмрд╣реБрдд рдкреБрд░рд╛рдирд╛ рдкреНрд░рдХрд╛рд░ рд╣реИред) рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ рдмрд╛рдВрдзрд╛ рдЧрдпрд╛ рдерд╛ рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдХреБрдЫ рднреА рдареЛрд╕ рдирд╣реАрдВ рд╣реИред

рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЦреБрд▓рд╛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рд╕рдореБрджрд╛рдп рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдкрд░ рдЖрдЧреЗ рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдпрд╛ рд╣рдо рд▓реЛрдЧреЛрдВ рдХреЛ рдирдП рдореБрджреНрджреЛрдВ рдХреЛ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рд╡реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реБрдЭрд╛рд╡ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЯреАрдмреАрдПрдЪ рдореИрдВ рдПрдХ рдордЬрдмреВрдд рд╡рд░реАрдпрддрд╛ рдирд╣реАрдВ рд╣реИред

рдзрдиреНрдпрд╡рд╛рджред рдЪреВрдВрдХрд┐ рд░реВрдг рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдпрд╣рд╛рдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдПрдкреАрдЖрдИ (рдпрд╛ рдЗрд╕рдХреЗ рдЕрдиреБрдорд╛рди) рдкрд╣рд▓реЗ рд╣реА рд╕рд╛рдордиреЗ рдЖ рдЪреБрдХреЗ рд╣реИрдВ, рдЖрдЗрдП рдЗрд╕реЗ рдмрдВрдж рдХрд░реЗрдВред рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд╣рд╛рдпрддрд╛ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореБрджреНрджреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рддреЛ рдХреНрдпрд╛ рдпрд╣ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╕реНрдерд┐рд░ рд╣реИ? рдХреНрдпреЛрдВрдХрд┐ рдкреВрд░реА рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдпрд╣ рднрдпрд╛рдирдХ рдирд╛рдо, рдЬреЛ рдХрд┐рд╕реА рднреА рдЬрд╛рдирдХрд╛рд░реА рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЕрдЪреНрдЫреЗ рдФрд░ рд╕рдЯреАрдХ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдпреВрдирд┐рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдорд┐рд▓реЗрдЧрд╛, рдФрд░ рдПрдХ рдЧреИрд░-рдореБрджреНрд░рдг рдЪрд░рд┐рддреНрд░ рдХреЗ рд╡рд┐рдкрд░реАрдд рдПрдХ рдЧреНрд▓рд┐рдлрд╝ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реИ, рдХреЗрд╡рд▓ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЕрдкрдиреЗ рдФрд╕рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рджреНрд╡рд╛рд░рд╛ рдпреВрдирд┐рдХреЛрдб рдХреА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рднрдпрд╛рдирдХ рд╕рдордЭ рдХреЛ рдЦрд░рд╛рдм рдХрд░реЗрдВред

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЗрд╕ рдмрд┐рдВрджреБ рд╕реЗ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╕рд┐рд░реНрдл Rune рднрд╛рдЧ рдФрд░ рдирд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреА рдЕрд╕рд╣рдорддрд┐ рдкрд░ рдЭрдВрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдореБрдЭреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдпреЛрдЬрдирд╛ 9 рдореЗрдВ Rune рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рдФрд░ рдЬреИрд╕реЗ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдиреЗ рдЗрд╕реЗ рдЧреЛ рдФрд░ рдЕрдиреНрдп рдореЗрдВ рджреЗрдЦрд╛ рд╣реИред рдЬрдм msdocs рдиреЗ Rune рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рддреЛ рдореБрдЭреЗ рдкрддрд╛ рдерд╛ рдХрд┐ рдкрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдерд╛ред

рдХрдо рд╕реЗ рдХрдо рджреЛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдкреНрд▓рд╛рди 9 рдФрд░ рдЧреЛ, рдЖрдкрдХреЗ рдкрд╛рд╕ Rune рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ UTF-8 рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╡реНрдпрдХреНрддрд┐ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╣рдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрди рдЪрд┐рдВрддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реЛрдЪрд╛ рдерд╛ рдФрд░ рдЕрднреА рднреА рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ Rune рдЙрдЪрд┐рдд рдерд╛ред рдХреБрдЫ рдкрд░рдВрдкрд░рд╛рд╡рд╛рджрд┐рдпреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд░реВрдирд┐рдХ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдм рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд▓реЗрдЦрди рдкреНрд░рдгрд╛рд▓реА рдирд╣реАрдВ рд╣реИред рдФрд░ Rune рдХрд╛ рдорддрд▓рдм рдЙрд╕ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдЧреНрд░реИрдлреЗрдо рд╣реИ, рдареАрдХ рд╡реИрд╕реЗ рд╣реА рдЬреИрд╕реЗ рдЗрд╕рдХрд╛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдпрд╣рд╛рдВ рдЧреНрд░реИрдлреЗрдо рд╣реИ (рдирд┐рдпрдВрддреНрд░рдг рд╡рд░реНрдгреЛрдВ рдЬреИрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ред

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╛рдордХрд░рдг рдореЗрдВ рдереЛрдбрд╝рд╛ рдЧрд▓рдд рджреЗрдЦрддрд╛ рд╣реВрдВред рд░реВрдирд┐рдХ рдЗрддрдиреА рдкреБрд░рд╛рдиреА рд▓реЗрдЦрди рдкреНрд░рдгрд╛рд▓реА рд╣реИ, рдореБрдЭреЗ рдЕрддреНрдпрдзрд┐рдХ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдФрд╕рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЗрд╕реЗ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ, рдФрд░ рдЙрдЪрд┐рдд рдпреВрдирд┐рдХреЛрдб "рд╡рд░реНрдг" рдХреЗ рд▓рд┐рдП Rune рдХрд╛ рдХрдИ рджрд╢рдХ рдкреБрд░рд╛рдирд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдирдХ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИред

@ рдПрдВрдЯреЛрдореА

рдареАрдХ рд╡реИрд╕реЗ рд╣реА рдЬреИрд╕реЗ рдЗрд╕рдХрд╛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЕрд░реНрде рдпрд╣рд╛рдБ рдЧреНрд░реИрдлреЗрдо рд╣реИ (рдирд┐рдпрдВрддреНрд░рдг рд╡рд░реНрдгреЛрдВ рдЬреИрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ред

рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рдирд╣реАрдВ рд╣реИред рдпреВрдирд┐рдХреЛрдб рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреВрд░реНрд╡-рдирд┐рд░реНрдорд┐рдд рдХреЛрдб рдмрд┐рдВрджреБ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдХрдИ рдЧреНрд░реЗрдлреЗрдо (рдЖрдорддреМрд░ рдкрд░ рдЕрдХреНрд╖рд░ рдФрд░ рд╡рд┐рд╢реЗрд╖рдХ рд╕рдВрдпреЛрдЬрди) рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдорддреМрд░ рдкрд░ рдлреНрд░реЗрдВрдЪ рдФрд░ рд╕реНрдкреЗрдирд┐рд╢ рдЬреИрд╕реА рднрд╛рд╖рд╛рдУрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрди рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рднреА рдХрдореНрдкреНрдпреВрдЯрд░реАрдХреГрдд рдкрд╛рда рдЙрди рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЕрдВрдХред

рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЬрдм рдПрдХ рдПрдХрд▓ рдХреЛрдб рдмрд┐рдВрджреБ рдПрдХ рдЧреНрд░реЗрдлреЗрдо рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрдирдХреЗ рд▓рд┐рдП рдПрдХ _grapheme рдХреНрд▓рд╕реНрдЯрд░_ рдореЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рд╣реЛрдирд╛ рдмрд╣реБрдд рдЖрдо рд╣реИ, рдЬреЛ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рд░рддреАрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдкрд╛рда рдХреЗ рдЙрдЪрд┐рдд рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЗрд╕рд▓рд┐рдП, рддреАрд░ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЪрд▓рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдорд╛рдирд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдПрдХрд▓ рд╡рд░реНрдг рдЕрдХреНрд╕рд░ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдХрдИ рдХреЛрдб рдмрд┐рдВрджреБрдУрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдХреЛрдб рдмрд┐рдВрджреБрдУрдВ рдФрд░ рдЧреНрд░реЗрдлреЗрдо рдпрд╛ рдЧреНрд░реЗрдлреЗрдо рд╕рдореВрд╣реЛрдВ рдХреЗ рдмреАрдЪ рдХреЛрдИ рдЖрд╕рд╛рди рдкрддреНрд░рд╛рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ "рдЪрд░рд┐рддреНрд░" рд╢рд╛рдпрдж рдПрдХ рдмреЗрд╣рддрд░ рдирд╛рдо рд╣реЛрдЧрд╛, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЕрдЬреАрдм рдФрд░ рдирд┐рд░рд╛рд▓рд╛ рдкрд╛рддреНрд░реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ "рд░рди" рдпрд╣ рдзрд╛рд░рдгрд╛ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдХрдерд┐рдд рдЪрд░рд┐рддреНрд░ рд╕реАрдорд╛рдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдореБрджреНрджрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рд╣рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрдм рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рдерд╛ред

рдЬрдм msdocs рдиреЗ рд░реВрдг рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рддреЛ рдореБрдЭреЗ рдкрддрд╛ рдерд╛ рдХрд┐ рдкрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдерд╛ред

рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдирд╛рдо рд░реВрдг рдиреЗ рдЧреНрд░реИрдлреЗрдореНрд╕ рдХрд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╕рдмреВрдд рд╣реИ рдЬреЛ рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣рд╛рдВ рд╣реИ: рдирд╛рдо "рд░реВрди" рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рд╕реБрд░рдХреНрд╖рд╛ рдХреА рдЭреВрдареА рднрд╛рд╡рдирд╛ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдпрд╣ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдкрддреНрд░рд╛рдЪрд╛рд░ рд╣реИред

рдХрдо рд╕реЗ рдХрдо рджреЛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдкреНрд▓рд╛рди 9 рдФрд░ рдЧреЛ, рдЖрдкрдХреЗ рдкрд╛рд╕ Rune рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ UTF-8 рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╡реНрдпрдХреНрддрд┐ рд╣реИрдВред

рдХреЗрди рдереЙрдореНрдкрд╕рди рдФрд░ рд░реЙрдм рдкрд╛рдЗрдХ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдорди рдореЗрдВ рдЬрд┐рддрдирд╛ рд╕рдореНрдорд╛рди рд╣реИ, рдпрд╣рд╛рдВ рдЙрдирдХрд╛ рдХрд╛рдо рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЪрд░-рд▓рдВрдмрд╛рдИ рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдПрдиреНрдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рдЪрддреБрд░ рдпреЛрдЬрдирд╛ рддреИрдпрд╛рд░ рдХрд░ рд░рд╣рд╛ рдерд╛ред рд╡реЗ рд╕рдордЧреНрд░ рд░реВрдк рд╕реЗ рдпреВрдирд┐рдХреЛрдб рдХреЗ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЙрдирд╕реЗ рдХрд╛рдлреА рдЕрд╕рд╣рдордд рд╣реВрдВред рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдпреВрдирд┐рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рднреА рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣рд╛рдВ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреА рдЕрдкреАрд▓ рдЙрддрдиреА рдордЬрдмреВрдд рд╣реИ рдЬрд┐рддрдиреА рдпрд╣ рд▓рдЧ рд╕рдХрддреА рд╣реИред

рдФрд░ рдЙрдЪрд┐рдд рдпреВрдирд┐рдХреЛрдб "рд╡рд░реНрдг" рдХреЗ рд▓рд┐рдП рд░реВрдг рдХреЗ рдХрдИ рджрд╢рдХ рдкреБрд░рд╛рдиреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдирдХ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореМрдЬреВрдж рд╣реИрдВред

"рдорд╛рдирдХ" рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ? рдпрд╣ рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рд┐рд░реНрдл рдЗрди рджреЛрдиреЛрдВ рдиреЗ рдирд╛рдо рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдпрд╛ рд╣реИ, рдФрд░ рдХреБрдЫ рдЫреЛрдЯреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдПрдВ рдЬреИрд╕реЗ рдХрд┐ рдирд┐рдо рдиреЗ рдЗрд╕реЗ рдЧреЛ рд╕реЗ рдЕрдкрдирд╛рдпрд╛ рд╣реИред рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореБрдЭреЗ рдлрд┐рд░ рд╕реЗ рджреЛрд╣рд░рд╛рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдПрдХ рдХреЛрдб рдмрд┐рдВрджреБ рдПрдХ "рдЙрдЪрд┐рдд рдпреВрдирд┐рдХреЛрдб рд╡рд░реНрдг" рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЪрд╛рд╣реЗ рд╡рд╣ рдЪрдпрди, рддреАрд░ рдХреБрдВрдЬреА рдЖрдВрджреЛрд▓рди, рдЧреНрд░реИрдлреЗрдо рдпрд╛ рдЧреНрд░реЗрдлреЗрдо рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рдЕрд░реНрде рдореЗрдВ рд╣реЛред

...рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдпрд╣рд╛рдБ рдЧреНрд░реИрдлреЗрдо рдХрд╛ рдЕрд░реНрде рд╣реИ ...

рд╣рд╛рдВ, рдЬреИрд╕рд╛ рдХрд┐ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдХрд╛рдлреА рдХрд░реАрдм рд╣реИред рдЧреНрд░реИрдлреЗрдореНрд╕, рдХрдо рд╕реЗ рдХрдо рднрд╛рд╖рд╛рд╡рд┐рдЬреНрдЮрд╛рди рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рд╡реЗ рдСрд░реНрдереЛрдЧреНрд░рд╛рдлрд╝рд┐рдХ рдШрдЯрдХ рд╣реИрдВ рдЬреЛ рдПрдХ рд▓реЗрдЦрди рдкреНрд░рдгрд╛рд▓реА рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рд╕реНрд╡рд░реЛрдВ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдпреЗ 1:1 рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИрдВред рд╕рд┐рд▓реЗрдмрд░реА рдФрд░ рд▓реЛрдЧреЛрд╕рд┐рд▓реЗрдмрд░реА рдореЗрдВ рдПрдХ рдПрдХрд▓ рдЧреНрд░реЗрдлреЗрдо рдХрдИ рд╕реНрд╡рд░реЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЖрдорддреМрд░ рдкрд░ рдПрдХ рд╡реНрдпрдВрдЬрди-рд╕реНрд╡рд░ рдЬреЛрдбрд╝реАред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рд╡рд░реНрдгрд╛рдиреБрдХреНрд░рдорд┐рдХ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЕрдХреНрд╕рд░ рдПрдХ рд╣реА рд╕реНрд╡рд░ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рдЧреНрд░реИрдлреЗрдо рдХреЗ рдорд╛рдорд▓реЗ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ "рд╡реЗрдВ" рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╢рдмреНрдж рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреБрд░рд╛рддрди рдиреИрддрд┐рдХрддрд╛ рдФрд░ рдХрд╛рдВрдЯреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рддрдм рдЖрдк рд╕рднреА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╕рд╣рдорддрд┐ рднреА рдирд╣реАрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ '├б' рдЬреИрд╕рд╛ рдЕрдХреНрд╖рд░ рд╕реНрд╡рдпрдВ рдХрд╛ рдЕрдиреВрдард╛ рдЕрдХреНрд╖рд░ рд╣реИ, рдпрд╛ 'a' рдПрдХ рдЙрдЪреНрдЪрд╛рд░рдг рдХреЗ рд╕рд╛рде рд╣реИред рд╣рдо рд╣рдЬрд╛рд░реЛрдВ рд╕рд╛рд▓ рдкреБрд░рд╛рдиреА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдПрдХрд░реВрдкрддрд╛ рднреА рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рд╣рдо рдЙрд╕рдХреЗ рдКрдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реБрд╕рдВрдЧрдд рдЬреЛрдбрд╝ рдирд╣реАрдВ рд░рдЦрдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рд╡рд╣ рд╣реИ рдЗрдирдХреА рдПрдиреНрдХреЛрдбрд┐рдВрдЧред

рдЪреВрдБрдХрд┐ рдЖрдк рдЕрддреНрдпрдВрдд рд╕рдЦреНрдд рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рд▓рд┐рдП рдмрд╣рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ UNICODE "рдЧреНрд░рд╛рдлреЗрдо рдХреНрд▓рд╕реНрдЯрд░" рдХрд╣рддрд╛ рд╣реИ, рд╡рд╣ рдЕрдХреНрд╕рд░ рднрд╛рд╖рд╛рд╡рд┐рдЬреНрдЮрд╛рди рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдЧреНрд░реИрдлреЗрдо рд╣реЛрддрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рдЕрдорд╛рдиреНрдп рдпреВрдирд┐рдХреЛрдб рд╣реИ? рдирд╣реАрдВред рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдпреВрдирд┐рдХреЛрдб рдХреЛ рдЗрд╕рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ? рдХреНрдпреЛрдВ рдирд╣реАрдВ? рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рд╕рдВрдЧред рдлрд╝реАрд▓реНрдбреНрд╕ рдХрд╛ рдЕрдкрдирд╛ рд▓рд┐рдВрдЧреЛ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЬрдм рддрдХ рдХрд┐рд╕реА рдПрдХ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдХреЙрдиреНрдлрд╝реЗрдХреНрд╢рди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддрдм рддрдХ рдпрд╣ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред

рдореИрдВ рдирд╛рдо рдХреЛ рдмрд╣реБрдд рдмрдбрд╝реА рдбреАрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ред рд╕рд╛рд░рд╛рдВрд╢ рдореЗрдВ Rune рдХреНрдпрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ Msdocs рд╕реНрдкрд╖реНрдЯ рд╣реИред рдЕрдЧрд░ рд▓реЛрдЧ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдирд╣реАрдВ рдкрдврд╝рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдЙрдирдХреА рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рд╣реИред рд▓реЛрдЧ 'рд╕реНрдЯреНрд░реАрдо' рдкрд░ рдЬреЛрд░рджрд╛рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рджреЗ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдмрдХрд╡рд╛рд╕ рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдЬреИрд╕реЗ "рдУрд╣ рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд▓реЛрдЧ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдХ рдЫреЛрдЯреА рдирджреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╣реА рдирд╛рдо рд╣реИ!" рдирд╣реАрдВред

@Serentty @Entomy рдЖрдк рджреЛрдиреЛрдВ рдХреЛ StringInfo рд╡рд░реНрдЧ рдореЗрдВ рднреА рд░реБрдЪрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдпреВрдирд┐рдХреЛрдб рдЕрд╡рдзрд╛рд░рдгрд╛ "рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдЧреНрд░реЗрдлреЗрдо рдХреНрд▓рд╕реНрдЯрд░" рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИред StringInfo рдкреНрд░рдХрд╛рд░ рдХрд╛рдлреА рдкреНрд░рд╛рдЪреАрди рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдпреВрдирд┐рдХреЛрдб рдорд╛рдирдХ рдХрд╛ рдПрдХ рдмрд╣реБрдд рдкреБрд░рд╛рдирд╛ рд╕рдВрд╕реНрдХрд░рдг рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди UAX #29, Sec рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд░рд┐рдп рдХрд╛рд░реНрдп рд╣реИред

рд╣рд╛рдВ, рдЬреИрд╕рд╛ рдХрд┐ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдХрд╛рдлреА рдХрд░реАрдм рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд░рдЪрд┐рдд рдмрдирд╛рдо рд╡рд┐рдШрдЯрд┐рдд рдЕрднреНрдпрд╛рд╡реЗрджрди рдХрд╛ рдореБрджреНрджрд╛ рдЗрд╕реЗ рдЕрд╕рддреНрдп рдмрдирд╛рддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреА рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ-рд╕рдВрдмрдВрдзрд┐рдд рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд╡рд┐рдкрд░реАрдд рдпрд╣рд╛рдВ рдПрдХ рдЧреНрд░реИрдлреЗрдо рдХреА рднрд╛рд╖рд╛рдИ рдкрд░рд┐рднрд╛рд╖рд╛ рд╕реЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдФрд░ рдЧреНрд░реИрдлреЗрдо рдХреЗ рд╕рдЯреАрдХ рд╕рдорд╛рди рдЕрдиреБрдХреНрд░рдо рд╣реИрдВ (рддреАрди рд╣рдВрдЧреБрд▓ рдЬрд╛рдореЛ рд╢рдмреНрджрд╛рдВрд╢ _han_ рдХреЛ рдЦрдВрдб HAN рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ), рдФрд░ рдлрд┐рд░ рднреА рдкрд╣рд▓рд╛ рдХреЗрд╡рд▓ рдПрдХ рдХреЛрдб рдмрд┐рдВрджреБ рд╣реИ рдЬрдмрдХрд┐ рджреВрд╕рд░рд╛ рддреАрди рдХрд╛ рдЕрдиреБрдХреНрд░рдо рд╣реИред

рдлрд╝реАрд▓реНрдбреНрд╕ рдХрд╛ рдЕрдкрдирд╛ рд▓рд┐рдВрдЧреЛ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЬрдм рддрдХ рдХрд┐рд╕реА рдПрдХ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдХреЙрдиреНрдлрд╝реЗрдХреНрд╢рди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддрдм рддрдХ рдпрд╣ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред

рдареАрдХ рдпрд╣реА рдореЗрд░реА рднреА рдмрд╛рдд рд╣реИред рдпреВрдирд┐рдХреЛрдб рдЕрдкрдиреА рд╢рдмреНрджрд╛рд╡рд▓реА рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЬрдЯрд┐рд▓ рдкреНрд░рдгрд╛рд▓реА рд╣реИ, рддреЛ рдЬрдм рдпрд╣ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдкрдВрдХреНрддрд┐рдмрджреНрдз рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдЙрд╕ рдкрд░ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЖрдзрд╛ рдмреЗрдХреНрдб "рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд" рд╢рдмреНрдж рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХреНрдпреЛрдВ рдХрд░реЗрдВ? рдХреЛрдб рдмрд┐рдВрджреБ рдХреЛрдб рдмрд┐рдВрджреБ рд╣реИрдВред рдЙрдирдХреЗ рдкрд╛рд╕ рдХреЛрдИ рднрд╛рд╖рд╛рдИ рд╕рдорд╛рдирд╛рдВрддрд░ рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╕рд╣рдЬ рд╣реЛрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬрдмрдХрд┐ рдХреЗрд╡рд▓ 75% рд╕рдЯреАрдХ рдЙрд╕реА рддрд░рд╣ рдХреА рдЖрдкрджрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдиреБрд╕реНрдЦрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕реА # рдЕрднреА рднреА рдареАрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдЪреВрдБрдХрд┐ рдЖрдк рдЕрддреНрдпрдВрдд рд╕рдЦреНрдд рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рд▓рд┐рдП рдмрд╣рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ UNICODE "рдЧреНрд░рд╛рдлреЗрдо рдХреНрд▓рд╕реНрдЯрд░" рдХрд╣рддрд╛ рд╣реИ, рд╡рд╣ рдЕрдХреНрд╕рд░ рднрд╛рд╖рд╛рд╡рд┐рдЬреНрдЮрд╛рди рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдЧреНрд░реИрдлреЗрдо рд╣реЛрддрд╛ рд╣реИред

рдорд╛рдирдХ рдореЗрдВ, рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдЧреНрд░реЗрдлреЗрдо рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред рдпрд╣рд╛рдВ рдЗрд╕рдореЗрдВ рдХреБрдЫ рднреА рдЧрд▓рдд рдирд╣реАрдВ рд╣реИред A _cluster_ рдкрд╛рда рдЪрдпрди рдФрд░ рдХрд░реНрд╕рд░ рдЧрддрд┐ рдХреА рдПрдХ рдЗрдХрд╛рдИ рд╣реИред

рдореИрдВ рдирд╛рдо рдХреЛ рдмрд╣реБрдд рдмрдбрд╝реА рдбреАрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ред рд╕рд╛рд░рд╛рдВрд╢ рдореЗрдВ рд░реВрдг рдХреНрдпрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ Msdocs рд╕реНрдкрд╖реНрдЯ рд╣реИред рдЕрдЧрд░ рд▓реЛрдЧ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдирд╣реАрдВ рдкрдврд╝рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдЙрдирдХреА рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рд╣реИред

рдпрд╣ "рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рд╣реЛрд╢рд┐рдпрд╛рд░ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ" рддрд░реНрдХ рд╣реИ рдЬреЛ рдЦрд░рд╛рдм рдбрд┐рдЬрд╛рдЗрди рдирд┐рд░реНрдгрдпреЛрдВ рдХреЗ рдмрдЪрд╛рд╡ рдореЗрдВ рдмрд╛рд░-рдмрд╛рд░ рд╕рд╛рдордиреЗ рдЖрддрд╛ рд╣реИред рдпрджрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдкрдврд╝рдиреЗ рдФрд░ рд╕реАрдЦрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рдПрдХ рд░рди рдпреВрдирд┐рдХреЛрдб рдХреЛрдб рдмрд┐рдВрджреБ рд╣реИ, рддреЛ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ рдЕрдзрд┐рдХ "рд╕рд╣рдЬ" рдирд╛рдо рдХрд╣рдиреЗ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рдпрд╣рд╛рдВ рддрд░реНрдХ рдпрд╣ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ "рдХреЛрдб рдмрд┐рдВрджреБ" рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рд╣рдЬ рдирд╛рдо рдЪреБрдирдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЬрдм рдирд╛рдо рдХреЗ рднреНрд░рд╛рдордХ рд╣реЛрдиреЗ рдХреЗ рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рддреЛ рдмрдЪрд╛рд╡ рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреЛрдб рдмрд┐рдВрджреБ рдХреНрдпрд╛ рд╣реИ рд╡реИрд╕реЗ рднреА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдкрдврд╝рдиреЗ рд╕реЗред рдЕрдЧрд░ рдРрд╕рд╛ рд╣реИ, рддреЛ рдХреНрдпреЛрдВ рди рдХреЗрд╡рд▓ CodePoint рдЯрд╛рдЗрдк рдХрд░реЗрдВ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рджреЗрдЦрдирд╛ рдФрд░ рд╕реАрдЦрдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рдПрдВ? рдпрд╣ рд╕рдм рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдПрдХ рддрд░рдл рд░рдЦ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдкрд╣рд▓реА рдЬрдЧрд╣ рдореЗрдВ рдпреВрдирд┐рдХреЛрдб рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ .NET рджрд╕реНрддрд╛рд╡реЗрдЬ рдмрд╣реБрдд рднрдпрд╛рдирдХ рд╣реИ, рд╕рд░реЛрдЧреЗрдЯ рдЬреЛрдбрд╝реЗ рдХреЛ "16-рдмрд┐рдЯ рдпреВрдирд┐рдХреЛрдб рд╡рд░реНрдгреЛрдВ" рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣ "рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рд╣реЛрд╢рд┐рдпрд╛рд░ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ" рддрд░реНрдХ рд╣реИ рдЬреЛ рдЦрд░рд╛рдм рдбрд┐рдЬрд╛рдЗрди рдирд┐рд░реНрдгрдпреЛрдВ рдХреЗ рдмрдЪрд╛рд╡ рдореЗрдВ рдмрд╛рд░-рдмрд╛рд░ рд╕рд╛рдордиреЗ рдЖрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдпрд╣ рдХрднреА рдирд╣реАрдВ рдХрд╣рд╛ред

рдпрд╣рд╛рдБ рддрд░реНрдХ рдпрд╣ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ "рдХреЛрдб рдмрд┐рдВрджреБ" рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ

рдпрд╣ рднреА рдореИрдВрдиреЗ рдХрднреА рдирд╣реАрдВ рдХрд╣рд╛ред

рд▓реЛрдЧ 'рд╕реНрдЯреНрд░реАрдо' рдкрд░ рдЬреЛрд░рджрд╛рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рджреЗ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдмрдХрд╡рд╛рд╕ рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдЬреИрд╕реЗ "рдУрд╣ рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд▓реЛрдЧ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдХ рдЫреЛрдЯреА рдирджреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╣реА рдирд╛рдо рд╣реИ!" рдирд╣реАрдВред

рдореИрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЗрддрдиреЗ рд╕реНрдорд╛рд░реНрдЯ рд╣реИрдВ рдХрд┐ рдпрд╣ рдирд╣реАрдВ рд╕реЛрдЪрддреЗ рдХрд┐ Rune рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХ рд░реВрдирд┐рдХ рд░рди рд╣реИ, рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдЬреИрд╕реЗ рд╡реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ Stream рдПрдХ рдЫреЛрдЯреА рдирджреА рдирд╣реАрдВ рд╣реИред

рдореБрдЭреЗ рдЗрд╕реЗ рджреЛрд╣рд░рд╛рдиреЗ рджреЛ

рдореИрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЗрд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕реНрдорд╛рд░реНрдЯ рд╣реИрдВред рддреБрдо рдореЗрд░реЗ рдореБрдВрд╣ рдореЗрдВ рд╢рдмреНрдж рдбрд╛рд▓ рд░рд╣реЗ рд╣реЛред

рдореИрдВ рдирд╛рдо рдХреЛ рдмрд╣реБрдд рдмрдбрд╝реА рдбреАрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ред рд╕рд╛рд░рд╛рдВрд╢ рдореЗрдВ рд░реВрдг рдХреНрдпрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ Msdocs рд╕реНрдкрд╖реНрдЯ рд╣реИред рдЕрдЧрд░ рд▓реЛрдЧ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдирд╣реАрдВ рдкрдврд╝рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдЙрдирдХреА рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рд╣реИред

рдореИрдВ рдпрд╣рд╛рдВ рдЗрд╕реА рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред "рд░реВрдг" рдирд╛рдо рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рддрд░реНрдХ рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди рдФрд░ рдПрдХ рдЕрдВрдЧреВрд░ рдХреА рдзрд╛рд░рдгрд╛ рдХреЗ рд╕рд╛рде рд╕рд╣рдЬ рд╕рдВрдмрдВрдз рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдЖрдк рд╕реНрд╡рдпрдВ рдпрд╣ рддрд░реНрдХ рджреЗ рд░рд╣реЗ рдереЗ рдХрд┐ рджреЛрдиреЛрдВ рдЗрддрдиреА рдирд┐рдХрдЯрддрд╛ рд╕реЗ рдкрдВрдХреНрддрд┐рдмрджреНрдз рдереЗ рдХрд┐ рдпрд╣ рдХреЛрдИ рдореБрджреНрджрд╛ рдирд╣реАрдВ рдерд╛ред рдЬрдм рдореИрдВрдиреЗ рд╕рднреА рддрд░реАрдХреЛрдВ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди рдЧрд▓рдд рдерд╛ рдФрд░ рдкрддреНрд░рд╛рдЪрд╛рд░ рдмрд╣реБрдд рдЦрд░рд╛рдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдереА рдХрд┐ рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рд╡реИрд╕реЗ рднреА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред "рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рд╣реЛрд╢рд┐рдпрд╛рд░ рд╣реЛрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ" рд╕реЗ рдореЗрд░рд╛ рдпрд╣реА рдорддрд▓рдм рд╣реИред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдирд╛рдореЛрдВ рдХреЛ рдЧреБрдорд░рд╛рд╣ рдХрд░рдиреЗ рдХрд╛ рдмрд╣рд╛рдирд╛ рдирд╣реАрдВ рд╣реИ, рдЬрдм рдЙрдирдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рд░рд╛рд╕рддреА рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИред

рдореИрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЗрддрдиреЗ рд╕реНрдорд╛рд░реНрдЯ рд╣реИрдВ рдХрд┐ рдпрд╣ рдирд╣реАрдВ рд╕реЛрдЪрддреЗ рдХрд┐ Rune рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХ рд░реВрдирд┐рдХ рд░рди рд╣реИ, рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдЬреИрд╕реЗ рд╡реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ Stream рдПрдХ рдЫреЛрдЯреА рдирджреА рдирд╣реАрдВ рд╣реИред

рдпрд╣рд╛рдВ рдореЗрд░рд╛ рддрд░реНрдХ рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд▓реЛрдЧ рдЗрд╕реЗ рд░реВрдирд┐рдХ рд░рдиреЛрдВ рд╕реЗ рднреНрд░рдорд┐рдд рдХрд░реЗрдВрдЧреЗред рдореЗрд░рд╛ рддрд░реНрдХ рдпрд╣ рд╣реИ рдХрд┐ рд▓реЛрдЧ рдЗрд╕реЗ рдЧреНрд▓рд┐рдлрд╝, рдЧреНрд░реИрдлреЗрдо рдФрд░ рдЧреНрд░реИрдлреЗрдо рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рдХрд░ рджреЗрдВрдЧреЗ, рдЬреЛ рдЖрдкрдХреЗ рдЖрдЧреНрд░рд╣ рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХреЛрдб рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдмреБрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред

рдореИрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЗрд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕реНрдорд╛рд░реНрдЯ рд╣реИрдВред рддреБрдо рдореЗрд░реЗ рдореБрдВрд╣ рдореЗрдВ рд╢рдмреНрдж рдбрд╛рд▓ рд░рд╣реЗ рд╣реЛред

рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдорд╛рд░реНрдЯ рд╣реИ рдХрд┐ рд╡реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬрд░реНрдордирд┐рдХ рд░рди рдирд╣реАрдВ рд╣реИрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗред рд▓реЗрдХрд┐рди рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╡реЗ рдЧреНрд▓рд┐рдлрд╝, рдЧреНрд░реЗрдлреЗрдо рдпрд╛ рдЧреНрд░реЗрдлреЗрдо рдХреНрд▓рд╕реНрдЯрд░ рдирд╣реАрдВ рд╣реИрдВ? рдпреВрдирд┐рдХреЛрдб рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреА рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рд╕рд╛рде рдореЗрд░рд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрднрд╡ рдирд╣реАрдВ рдХрд╣рддрд╛ рд╣реИред

рдЕрдЧрд░ рд▓реЛрдЧ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдирд╣реАрдВ рдкрдврд╝рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдЙрдирдХреА рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рд╣реИред

рд╣рд╛рдВ, рдФрд░ рдореИрдВ рдЗрд╕ рдкрд░ рдХрд╛рдпрдо рд╣реВрдВред рдпрд╣ рдмреБрджреНрдзрд┐ рдореЗрдВ рдХрдореА рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдЬрд▓реНрджрдмрд╛рдЬреА рдХреА рдзрд╛рд░рдгрд╛рдУрдВ рдХреА рдкреНрд░рд╡реГрддреНрддрд┐ рдХреЗ рдХрд╛рд░рдг рд╣реИред

рдпрджрд┐ рдХреЛрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ String рдХрд╛ рдЕрд░реНрде рд╣реИ рдПрдХ рдордЬрдмреВрдд, рдкрддрд▓рд╛, рд░рд╕реНрд╕реА рдХрд╛ рдЯреБрдХрдбрд╝рд╛, рдЬреЛ рдзрд╛рдЧреЛрдВ рдХреЗ рдШреБрдорд╛рд╡ рд╕реЗ рдмрдирд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐, рд╣рд╛рдБ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐, рдЗрд╕реЗ String рдирд╛рдо рдХреА рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ .

рдпрджрд┐ рдХреЛрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ Char рдХрд╛ рдЕрд░реНрде рд╣реИ рдЪрд╛рд░рдХреЛрд▓, рдпрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХреА рдЯреНрд░рд╛рдЙрдЯ рдЬреИрд╕реА рдЬрд▓реА рд╣реБрдИ рд╕рд╛рдордЧреНрд░реА, рдЬрд┐рд╕реЗ Char рдирд╛рдо рдХреА рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрджрд┐ рдХреЛрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ character рдХрд╛ рдЕрд░реНрде рдХрд╣рд╛рдиреА рдХрд╣рдиреЗ рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рдорд╛рдирд╕рд┐рдХ рдФрд░ рдиреИрддрд┐рдХ рд▓рдХреНрд╖рдгреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХрд╛ рдЪрд┐рддреНрд░рдг рд╣реИ, рдЬрд┐рд╕реЗ character рдирд╛рдо рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпреЗ рд╕рднреА рдЯреЗрдХреНрд╕реНрдЯ/рднрд╛рд╖рд╛рдИ рдорд╛рдорд▓реЗ рд╣реИрдВред рдЙрди рд╕рднреА рдХреЗ рдЕрдиреНрдп рдЕрд░реНрде рд╣реИрдВред рдФрд░ рдлрд┐рд░ рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдиреЗ рдареАрдХ-рдард╛рдХ рдЕрднреНрдпрд╕реНрдд рдХрд┐рдпрд╛ рд╣реИред рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрдХ рд╕реНрдерд╛рдкрд┐рдд рд╕рдореНрдореЗрд▓рди рдХреЗ рдХрд╛рд░рдг рд╡реЗ рд╢рдмреНрдж рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдирдХ рдмрди рдЧрдП рд╣реИрдВ: рд╣рдорд╛рд░рд╛ рд▓рд┐рдВрдЧреЛред рдПрдХ рд╕реНрдерд╛рдкрд┐рдд рдорд┐рд╕рд╛рд▓ рд╣реИ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ _are_ рдЗрд╕рдХреЗ рд╕рд╛рде рдЪрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдорд╛рд░реНрдЯ рд╣реИрдВред

рдЖрдк рд╕реНрд╡рдпрдВ рдпрд╣ рддрд░реНрдХ рджреЗ рд░рд╣реЗ рдереЗ рдХрд┐ рджреЛрдиреЛрдВ рдЗрддрдиреА рдирд┐рдХрдЯрддрд╛ рд╕реЗ рдкрдВрдХреНрддрд┐рдмрджреНрдз рдереЗ рдХрд┐ рдпрд╣ рдХреЛрдИ рдореБрджреНрджрд╛ рдирд╣реАрдВ рдерд╛ред

рд╣рд╛рдБ рдпрд╣ рдЧрд┐рдЯрд╣рдм рд╣реИред рдкрд╣рд▓реЗ рд╕реЗ рдмрдВрдж рдореБрджреНрджреЗ рдкрд░, рдЬрд╣рд╛рдВ рдореИрдВ рд╕рд┐рд░реНрдл рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░ рдЬреЛрдбрд╝ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдореБрдЭреЗ рдХреНрдпреЛрдВ рд▓рдЧрд╛ рдХрд┐ Rune рдареАрдХ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдирд╛рдо рдореЗрдВ рдХреБрдЫ рд╕реНрдерд╛рдкрд┐рдд рдорд┐рд╕рд╛рд▓ рдереАред рд╡реНрдпрд╛рдкрдХ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдФрд░ рдзреНрдпрд╛рди рд╕реЗ рдЪреБрдиреЗ рдЧрдП рд╢рдмреНрджреЛрдВ рд╕реЗ рднрд░рд╛ рдПрдХ рдЧреНрд░рдВрде рд▓рд┐рдЦрдиреЗ рдХрд╛ рдпрд╣ рд╕реНрдерд╛рди рдпрд╛ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдореИрдВ рдПрдХ рдпреВрдЯреАрдПрдл -8 рдбрд┐рдХреЛрдбрд░ рдХреЗ рд▓рд┐рдП рдкреАрдЖрд░ рдбрд╛рд▓ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдореИрдВрдиреЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реАрдХреЛрдВ рдкрд░ рд╣реЛрд╣рд░рдореИрди рдбреАрдПрдлрдП рдХреЛ рдХреНрдпреЛрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред рдореИрдВ рдмрд╕ рдпрд╣ рдХрд╣рдиреЗ рд╡рд╛рд▓рд╛ рд╣реВрдВ "рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ, рдпрд╣рд╛рдБ рдХреБрдЫ рдкреНрд░рдорд╛рдг рд╣реИ рдЬреЛ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣рд╛рдБ рдХреБрдЫ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╣реИрдВ рдЬреЛ рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреНрдпреЛрдВ рдЧрдпрд╛"ред

рдореЗрд░рд╛ рддрд░реНрдХ рдпрд╣ рд╣реИ рдХрд┐ рд▓реЛрдЧ рдЗрд╕реЗ рдЧреНрд▓рд┐рдлрд╝, рдЧреНрд░реИрдлреЗрдо рдФрд░ рдЧреНрд░реЗрдлреЗрдо рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рдХрд░реЗрдВрдЧреЗ

рд╡реЗ рдЙрдкрд░реЛрдХреНрдд рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЛ рднреА рднреНрд░рдорд┐рдд рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рди рд╣реА Tree , Heap , Table , Key , Socket , Port ...

рдпрд╣ рдмреЗрд╣рдж рдмреЗрд╣реВрджрд╛ рддрд░реНрдХ рд╣реИред рдзрд╛рдЧреЗ рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдФрд░ рдкрд╛рда рдХреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЖрд╕рд╛рдиреА рд╕реЗ рднреНрд░рдорд┐рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдПрдХ рд▓рдВрдмрд╛ рдкреМрдзрд╛ рдФрд░ рдПрдХ рдкреЗрдбрд╝ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рднреНрд░рдорд┐рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рджреВрд╕рд░реА рдУрд░ рдПрдХ рдХреЛрдб рдмрд┐рдВрджреБ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рджреНрд╡рд╛рд░рд╛ рдмрд╣реБрдд рдХрдо рд╕рдордЭреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ, рдФрд░ рд▓рдЧрд╛рддрд╛рд░ рдЙрди рд╕рднреА рдЕрдиреНрдп рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рд╣реИ рдЬрд┐рдирдХреА рд╣рдордиреЗ рдЪрд░реНрдЪрд╛ рдХреА рд╣реИред рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдкрдврд╝рдирд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреЛрдб рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ "рдЪрддреБрд░" рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реА рднрд╛рд╖рд╛ _рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдпреВрдирд┐рдХреЛрдб рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг_ рд╕реЗ рдЙрд╕ рднрд╛рд╖рд╛ рдореЗрдВ рдЬреНрдЮрд╛рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдФрд░ рднреА рдХрдард┐рди рдмрдирд╛ рджреЗрддреА рд╣реИред рдФрд░ рдпрд╣ рдореБрдЭреЗ рдЗрд╕ рдкрд░ рд▓рд╛рддрд╛ рд╣реИ:

рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрдХ рд╕реНрдерд╛рдкрд┐рдд рд╕рдореНрдореЗрд▓рди рдХреЗ рдХрд╛рд░рдг рд╡реЗ рд╢рдмреНрдж рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдирдХ рдмрди рдЧрдП рд╣реИрдВ: рд╣рдорд╛рд░рд╛ рд▓рд┐рдВрдЧреЛред

рдФрд░ рдпрд╣реА рд╕рдмрдХрд╛ рдореВрд▓ рд╣реИред рдЖрдк рджрд╛рд╡рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдпрд╛ рддреЛ "рд░рди" рдПрдХ рдХреЛрдб рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рд╢рдмреНрдж рд╣реИ рдЬрд┐рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛ рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдпрд╣ рдкреВрд░реНрд╡ рд╣реИ, рддреЛ рдореИрдВ рдЖрдкрдХреЛ рдЧреЛ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рдореБрдЦ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рдЕрдиреБрднрд╡реА рдФрд╕рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╕реЗ рдкреВрдЫрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдпрджрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕реЗ рдХрднреА рд╕реБрдирд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдмрд╛рдж рдХреА рдмрд╛рдд рд╣реИ, рддреЛ рдореИрдВ рдЖрдкрд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рднреНрд░рдорд┐рдд рдФрд░ рдЦрд░рд╛рдм рд╕рдордЭреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдпреВрдирд┐рдХреЛрдб рд╢рдмреНрджрд╛рд╡рд▓реА рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдХрд░рдиреЗ рдХреА рдмрд╛рдд рдкреВрдЫреВрдВрдЧрд╛, рдЬрд┐рд╕реЗ рдЕрдХреНрд╕рд░ рдЕрддреНрдпрдзрд┐рдХ рдЕрдиреБрднрд╡реА рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рднреА рдЧрд▓рдд рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИред

@Entomy рдмрд╛рд╣рд░реА рдЗрдирдкреБрдЯ: рдЖрдкрдХрд╛ рдкреВрд░рд╛ рддрд░реНрдХ, рдЬрд╣рд╛рдБ рддрдХ рдореИрдВ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдБ, 'рдпрд╣ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдФрд░ рдмреБрд░рд╛ рд╣реИ, рд╣рд╛рдБ, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрддрдирд╛ рднреНрд░рдорд┐рдд рдФрд░ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ 'ред
рдЗрд╕рд▓рд┐рдП? рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛? рдЗрд╕реЗ рдпреВрдирд┐рдХреЛрдб рдирд╛рдо рджреЗрдиреЗ рдореЗрдВ рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рд╣реИ?
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд░рдиреЛрдВ рдХреЛрдб рдмрд┐рдВрджреБ, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЧреНрд░реИрдлреЗрдо рдпрд╛ рдХреНрд▓рд╕реНрдЯрд░ рдирд╣реАрдВ рд╣реИрдВред рдпрджрд┐ рдЖрдк Google рдореЗрдВ 'рдпреВрдирд┐рдХреЛрдб рд░рди' рдЦреЛрдЬрддреЗ рд╣реИрдВ, рддреЛ рдХреЛрдб рдмрд┐рдВрджреБрдУрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдЫ рднреА рдкреГрд╖реНрда 2 рддрдХ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рднреА рдпрд╣ рд╕рд┐рд░реНрдл рдЧреЛрдбреЛрдХ/рдирд┐рдо рд▓рд┐рдВрдХ рд╣реИред DuckDuckGo рдкрд░ рднреА, рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рд╕рд╣рдЬ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдЕрднреА рднреА рдПрдХ рдкреЗрдЬ 2 рдкрд░рд┐рдгрд╛рдо рд╣реИред рддреЛ рдореИрдВрдиреЗ рдЬреЛ рдирд╛рдо рджреЗрдЦрд╛ рд╣реИ рдЙрд╕рдХреЗ рд▓рд┐рдП рдПрдХрдорд╛рддреНрд░ рддрд░реНрдХ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдХреЛрдб рдмрд┐рдВрджреБ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ рд╣реИ ред рдпрд╣ рд╕рд╣рдЬ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЧреНрд░реЗрдлреЗрдо рдХреНрд▓рд╕реНрдЯрд░, рдпрд╛ рд╢рд╛рдпрдж рд╕рд┐рд░реНрдл рдПрдХ рдЧреНрд░реЗрдлреЗрдо рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред
рд╕реНрд░реЛрдд: рдореИрдВрдиреЗ рдЧреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рдЪрд╛рд░ рд╕рд╛рд▓ рдмрд╛рдж рддрдХ рдПрдХ рдЧреНрд░реИрдлреЗрдо рдерд╛ рдЬрдм рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЕрднреА рдкрдврд╝рд╛ред

(рдФрд░ рдХрд╣ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдареАрдХ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЧреНрд░реИрдлреЗрдо рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ 'рдХрд╛рдлреА рдХрд░реАрдм' рд╣реИ рдореБрдЭреЗ 16-рдмрд┐рдЯ рдЪрд╛рд░ рдХреЗ рдХрд╛рдлреА рдХрд░реАрдм рд╣реЛрдиреЗ рдХреА рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реИред)
рд╣рд╛рдВ, рдпрджрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реЛрд╢рд┐рдпрд╛рд░ рд╣реЛрддреЗ рдФрд░ рдЕрдзрд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдкрдврд╝рддреЗ рд╣реИрдВ рддреЛ рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рд░реНрдердХ рдирд╛рдо рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред рд▓реЛрдЧ рд╕рд┐рд░реНрдл рдЪрд╛рд░ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдЗрдВрдЯ рдореЗрдВ рдХреЛрдб рдкреЙрдЗрдВрдЯ рдкрд╛рд╕ рдХрд░рдирд╛ рдЬрд╛рдирддреЗ рд╣реЛрдВрдЧреЗред рд▓реЗрдХрд┐рди рд╡реЗ рдирд╣реАрдВ рд╣реИрдВред рд╡реЗ рдЙрддрдиреЗ рд╣реА рд╕реНрдорд╛рд░реНрдЯ рд╣реИрдВ рдЬрд┐рддрдиреЗ рд╡реЗ рдЕрднреА рд╣реИрдВ, рдФрд░ рдпрд╣ рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдмрджрд▓рдиреЗ рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрднреА рддрдХ рдПрдХ рдФрд░ рдПрдкреАрдЖрдИ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред рд▓рдХреНрд╖реНрдп рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреА рдорд╛рддреНрд░рд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдЕрдВрдЧреНрд░реЗрдЬреА рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ, рди рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирдП рддрд░реАрдХреЗ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рд╣реА рдкреНрд░рд╡реЗрд╢ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдмрд╛рдзрд╛рдУрдВ рдХреЛ рд░рдЦрддрд╛ рд╣реИред

рд╕рд┐рд░реНрдл рддрд░реНрдХ рдХреЗ рд▓рд┐рдП, рдФрд░ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдпрд╣рд╛рдВ рд╕рднреА рдХреЛ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдкрд░ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдпреВрдирд┐рдХреЛрдб рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╛рд▓рддреА рд╣реИ, рдЬрд╣рд╛рдВ ┬╗рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда┬л рдХреЛ рдпреВрдирд┐рдХреЛрдб рдорд╛рдирдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░ ┬╗рдирд┐рдХрдЯрддрдо рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ┬л, рдирд╣реАрдВ рдирдХрд▓реА рд╕рд╛рджрдЧреА рд╕реЗ: рд╕реНрд╡рд┐рдлреНрдЯ

  • String рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдпреВрдирд┐рдХреЛрдб рдЯреЗрдХреНрд╕реНрдЯ рдХрд╛ рдмрдлрд░ рд╣реИред
  • Character , рдЬрд┐рд╕реЗ рдЖрдк рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреНрдпрд╛ рдирд╣реАрдВ , рдПрдХ рдпреВрдирд┐рдХреЛрдб рд╕реНрдХреЗрд▓рд░ рдорд╛рди рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдЧреНрд░реИрдлреЗрдо рдХреНрд▓рд╕реНрдЯрд░ рд╣реИред рдЧреНрд░реЗрдлреЗрдо рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ эХЬ : let decomposed: Character = "\u{1112}\u{1161}\u{11AB}" // сДТ, сЕб, сЖл
  • рдпрджрд┐ рдЖрдкрдХреЛ рдпреВрдирд┐рдХреЛрдб рд╕реНрдХреЗрд▓рд░ рдорд╛рдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЙрди рдкрд░ рднреА рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ UnicodeScalar рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
  • рдФрд░ рдпрджрд┐ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдорд╣рд╕реВрд╕ рд╣реЛрддреА рд╣реИ, рддреЛ рдЖрдк UTF-8 рдФрд░ UTF-16 рдХреЛрдб рдЗрдХрд╛рдЗрдпреЛрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ UInt 8 s рдФрд░ UInt 16 s рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддреЗ рд╣реИрдВред

рдЕрдм, рдореИрдВ рдпрд╣рд╛рдБ C# рдХреЛ рдкреВрд░реНрдг рд╕реНрд╡рд┐рдлреНрдЯ рд╢реИрд▓реА рдореЗрдВ рдЬрд╛рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рд╣реВрдБред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реЛрдЧрд╛, рдпрд╣ рднреА рдмрд╣реБрдд рд╕рд╛рд░реЗ рдмрджрд▓рд╛рд╡ рдФрд░ рдХрд╛рдо рдХреА рдЬрд░реВрд░рдд рд╣реИред рдореИрдВ рдпрд╣рд╛рдБ рд╕реНрд╡рд┐рдлреНрдЯ-рд╢реИрд▓реА рдХреЗ рдирд╛рдордХрд░рдг рдХреЛ рдЪреБрдирдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реВрдБ, рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╕рднреА рдХрд╛рд░рдгреЛрдВ рд╕реЗ @Serentty рдиреЗ рдмрддрд╛рдпрд╛, рдФрд░ рдЯреЗрдХреНрд╕реНрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рдЕрдВрддрддрдГ рд╕реНрд╡рд┐рдлреНрдЯ рд╢реИрд▓реА рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдк рдХреЛ рдЦреБрд▓рд╛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдПред

Rune рд╕реЗ рдХреБрдЫ рд╕рдВрднрд╛рд╡рд┐рдд рдмреЗрд╣рддрд░ рдирд╛рдо: CodeUnit32 , UnicodeScalar , CodeUnit , UniScalar , UnicodeValue , UniValue , UnicodeScalarValue ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рджреЛ рд╕реА # рдХреЗ рдирд╛рдордХрд░рдг рд╕рдореНрдореЗрд▓рдиреЛрдВ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рдлрд┐рдЯ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ UnicodeScalar рд╡рд╕реНрддреБрдирд┐рд╖реНрда рд░реВрдк рд╕реЗ рдмреЗрд╣рддрд░ рдирд╛рдо рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рдЗрдХрд╛рдЗрдпрд╛рдБ рдпреВрдирд┐рдХреЛрдб рд▓рд┐рдВрдЧреЛ рдореЗрдВ рдпреВрдирд┐рдХреЛрдб рд╕реНрдХреЗрд▓рд░ рдорд╛рди рдХреЛ рдПрдиреНрдХреЛрдб рдХрд░рдиреЗ рдХреЗ рдХреЗрд╡рд▓ рддрд░реАрдХреЗ рд╣реИрдВред рддреЛ CodeUnit32 рдХрд╛ рддрд╛рддреНрдкрд░реНрдп UTF-32-рдПрдиреНрдХреЛрдбреЗрдб рдЯреЗрдХреНрд╕реНрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдХреЛрдб рдЗрдХрд╛рдЗрдпреЛрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╣реИ, рдЬрдмрдХрд┐ UnicodeScalar рдПрдиреНрдХреЛрдбрд┐рдВрдЧ-рдЕрдЬреНрдЮреЗрдпрд╡рд╛рджреА рд╣реИред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд╣рд╛рдБ, System.Rune рдирд╛рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрд▓рдмреНрдз рд╣реИред рдпрд╣ рд╕рдм рд╕рд┐рд░реНрдл рдПрдХ ┬╗рдЕрдЧрд░ рд╣рдо рдЗрд╕реЗ рдЖрдзрд╛ рджрд╢рдХ рдкреБрд░рд╛рдирд╛ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдмреЗрд╣рддрд░ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ┬л.

@ рдкрд╛рдИ-рд╕реНрд╡рд╛рдж

рдЖрдкрдХрд╛ рдкреВрд░рд╛ рддрд░реНрдХ, рдЬрд╣рд╛рдБ рддрдХ рдореИрдВ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдБ, 'рдпрд╣ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдФрд░ рдмреБрд░рд╛ рд╣реИ, рд╣рд╛рдБ, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрддрдирд╛ рднреНрд░рдорд┐рдд рдФрд░ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ'ред

рдирд╣реАрдВ, рдпрд╣ рдореЗрд░рд╛ рддрд░реНрдХ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╣реИред рдореИрдВ рдЕрдкрдиреА рд╡рд┐рдХрд▓рд╛рдВрдЧрддрд╛ рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░рд╛ рдЗрдЪреНрдЫрд┐рдд рд╕рдВрдЪрд╛рд░ рдирд╣реАрдВ рд╣реИред

рдпрджрд┐ рдЖрдк Google рдореЗрдВ 'рдпреВрдирд┐рдХреЛрдб рд░рди' рдЦреЛрдЬрддреЗ рд╣реИрдВ, рддреЛ рдХреЛрдб рдмрд┐рдВрджреБрдУрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдЫ рднреА рдкреГрд╖реНрда 2 рддрдХ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рднреА рдпрд╣ рд╕рд┐рд░реНрдл рдЧреЛрдбреЛрдХ/рдирд┐рдо рд▓рд┐рдВрдХ рд╣реИред

рдпрджрд┐ рдЖрдк Google рдореЗрдВ 'рдпреВрдирд┐рдХреЛрдб рд╕реНрдЯреНрд░рд┐рдВрдЧ' рдЦреЛрдЬрддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛ рдХрд┐ .NET рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИрдВред рдпрд╣ рдЖрд╕рдиреНрди рд╡рд╕реНрддреБ рдХреА рдЦреЛрдЬ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИред рдПрдХ рдмрд╣реБрдд рд╕рдЦреНрдд рд╕рд╛рджреГрд╢реНрдп рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ .NET рдФрд░ Ada рджреЛрдиреЛрдВ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рддрд╛ рд╣реВрдВ; string рдЙрдирдХреЗ рдмреАрдЪ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдорд╛рдореВрд▓реА рдкрдврд╝рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред

рднрд╛рд╖рд╛ рдореЗрдВ рдЕрддрд┐рднрд╛рд░рд┐рдд рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рдЕрд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рднреА рд╣рдо рдареАрдХ рдкреНрд░рдмрдВрдзрди рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЖрдкрдХреЛ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди "рд░рди" рдореЗрдВ рдХрдо рд╕реЗ рдХрдо 179 рдФрдкрдЪрд╛рд░рд┐рдХ рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рд╣реИрдВ, "рдЯреЗрдХ" рдореЗрдВ рдХрдо рд╕реЗ рдХрдо 127, "рдмреНрд░реЗрдХ" рдореЗрдВ рдХрдо рд╕реЗ рдХрдо "123" рд╣реИ, рдФрд░ рдЗрд╕реА рддрд░рд╣ред [ рд╕реНрд░реЛрдд ] рд▓реЛрдЧ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рд╣реИрдВ рдФрд░ рдЬреЛ рдпрд╣рд╛рдВ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЙрд╕рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХрдо рд╕реЗ рдХрдо 2 рдФрдкрдЪрд╛рд░рд┐рдХ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рд╡рд╛рд▓реЗ "рд░реВрди" рдХреА рдЪрд┐рдВрддрд╛, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЬрдм рд▓реЛрдЧреЛрдВ рдХреЛ 50x рд╕реЗ рдЕрдзрд┐рдХ рдУрд╡рд░рд▓реЛрдб рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддрдм рд╡рд╛рд░рдВрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдЦреЛрдЬ рдЗрдВрдЬрди рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдШреЛрд░ рд╢реЛрд╖рдг рдХрд░ рд░рд╣рд╛ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдЦреЛрдЬ рдЗрдВрдЬрдиреЛрдВ рдХреЗ рд╕рд╛рде, рдЖрдкрдХреЛ рдЗрд╕ рдЖрдзрд╛рд░ рдкрд░ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рддрдиреЗ рдкреГрд╖реНрда рдХрд┐рд╕реА рдЪреАрдЬрд╝ рд╕реЗ рд▓рд┐рдВрдХ рд╣реЛрддреЗ рд╣реИрдВред рдЕрдиреНрдп рдХрд╛рд░рдХ рднреА рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдЪреАрдЬреЛрдВ рдХреЛ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рднрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ .NET Rune рддреБрд▓рдирд╛ рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рдХрд╛рдлреА рд╣рд╛рд▓рд┐рдпрд╛ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕рд╛рдордЧреНрд░реА рдмрд╣реБрдд рдХрдо рд╣реЛрдЧреА, рдФрд░ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рдкреГрд╖реНрда рд▓рдЧреЗрдВрдЧреЗред рд▓реЗрдХрд┐рди рдпрд╣ рдЧрд▓рдд рд╕рд░реНрдЪ рдЯреВрд▓ рдХрд╛ рднреА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЕрдЧрд░ рдореИрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ-рдЦреЛрдЬ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдкрд░ рд╢реЛрдз рдЦреЛрдЬрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рд╕рд╛рд▓реЛрдВ рдореЗрдВ рдХреБрдЫ рдирдпрд╛ рдЖрдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рддреЛ рдореИрдВ Google рдпрд╛ рдбреАрдбреАрдЬреА рдирд╣реАрдВ рдЦреЛрдЬрддрд╛ред рд╕рд┐рдореЗрдВрдЯрд┐рдХ рд╕реНрдХреЙрд▓рд░, рдЧреВрдЧрд▓ рд╕реНрдХреЙрд▓рд░ рдФрд░ рдЕрдиреНрдп рдмреЗрд╣рддрд░ рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рд╣реИрдВред рдЗрд╕реА рддрд░рд╣, рдпрджрд┐ рдЖрдк .NET API рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреАрдЬреЛрдВ рдХреЛ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкрд╣рд▓реЗ MSDocs рдЦреЛрдЬрддреЗ рд╣реИрдВред рдЕрдЧрд░ рдореИрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ "рдЬрдбрд╝рддрд╛ рдХрд╛ рдХреНрд╖рдг", рдПрдХ рднреМрддрд┐рдХреА/рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рд╢рдмреНрдж, рдЗрд╕рдХреЗ рдирд╛рдо рдкрд░ рдЕрд╕реНрдкрд╖реНрдЯ рдпрд╛ рднреНрд░рд╛рдордХ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдирд╛рдо рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд╕рдмрд╕реЗ рдХрдо рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдкрд╣рд▓реА рдХреБрдЫ рдХрд┐рддрд╛рдмреЛрдВ рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣реА рд╣реИ рдбреЗрд╡реА рджрд╢рдорд▓рд╡ рд╡рд░реНрдЧреАрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ, рдпрд╣ "рдЬрдбрд╝рддрд╛ рдХреЗ рдХреНрд╖рдг" рдХреЗ рдирд╛рдордХрд░рдг рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ; рдореИрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЧрд▓рдд рдЬрдЧрд╣ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБред

рд╕реНрд░реЛрдд: рдореИрдВрдиреЗ рдЧреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рдЪрд╛рд░ рд╕рд╛рд▓ рдмрд╛рдж рддрдХ рдПрдХ рдЧреНрд░реИрдлреЗрдо рдерд╛ рдЬрдм рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЕрднреА рдкрдврд╝рд╛ред

рдореИрдВрдиреЗ рдЧреЛ рдбреЙрдХреНрд╕ рдХреЛ рджреЗрдЦрд╛ рдФрд░ рдиреЛрдЯреНрд╕ рдЬрд╛рд░реА рдХрд┐рдП, рдХрдо рд╕реЗ рдХрдо рд╡реЗ рдЬреЛ рдореБрдЭреЗ рдорд┐рд▓реЗ, рдФрд░ рдореБрдЭреЗ рдЖрдкрд╕реЗ рд╕рд╣рдордд рд╣реЛрдирд╛ рд╣реЛрдЧрд╛ред рд╡реЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИрдВ рдХрд┐ rune рдХреНрдпрд╛ рд╣реИ, рдФрд░ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдпрд╣ рднреА рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ rune рдХрд┐рддрдирд╛ рдмрдбрд╝рд╛ рд╣реИред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдмрд╛рдж рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рдмрдиреЗрдЧреА, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдПрдбрд╛ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреА рдмрд╛рдзрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЧрдзреЗ рдореЗрдВ рдЦреБрдж рдХреЛ рдХрд╛рдЯрддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ msdocs рдмрд╣реБрдд рд╡рд┐рд╕реНрддреГрдд рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдмреЗрд╣рддрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдПрдХ рдпреВрдирд┐рдХреЛрдб рд╕реНрдХреЗрд▓рд░ рдорд╛рди рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ ([рдпреВ+0000..рдпреВ+рдбреА7рдПрдлрдПрдл], рд╕рдорд╛рд╡реЗрд╢реА; рдпрд╛ [рдпреВ+рдИ000..рдпреВ+10рдПрдлрдПрдлрдПрдлрдПрдл], рд╕рдорд╛рд╡реЗрд╢реА)ред

рдпрд╣ рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдХреБрдЫ рдХрдореА рд╣реИ рдФрд░ рдХреБрдЫ рд╡рд┐рд╕реНрддрд╛рд░ рдХреНрдпреЛрдВ Rune рдореМрдЬреВрдж рд╣реИ рдФрд░ рдЬрдм рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдлрд╛рдпрджреЗрдордВрдж рд╣реЛрдЧрд╛ (рдФрд░ рдореЗрд░реЗ рд╕рд░рд▓реАрдХреГрдд рдЙрдкрд░реЛрдХреНрдд рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╕реНрдерд╛рди рднреА) . рдореИрдВ рд╡рд╣рд╛рдВ рдХреБрдЫ рд╕реБрдзрд╛рд░ рдЖрдЧреЗ рд░рдЦреВрдВрдЧрд╛ред

@Evrey

рд╕рд┐рд░реНрдл рддрд░реНрдХ рдХреЗ рд▓рд┐рдП, рдФрд░ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдпрд╣рд╛рдВ рд╕рднреА рдХреЛ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдкрд░ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдпреВрдирд┐рдХреЛрдб рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╛рд▓рддреА рд╣реИ

рдпрд╣ рдПрдХ рд░рд╛рдп рд╣реИред рдПрдХ рдореИрдВ рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣рдордд рд╣реВрдБ; рд╕реНрд╡рд┐рдлреНрдЯ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдзреБрдирд┐рдХ рдпреВрдирд┐рдХреЛрдб рдХреЛ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрднрд╛рд▓рддреА рд╣реИред рд▓реЗрдХрд┐рди рдЗрди рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рд╣рдХрд░реНрдореА-рд╕рдореАрдХреНрд╖рд┐рдд рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╢реЛрдз рдХреЗ рдЙрджреНрдзрд░рдг рдХреЗ рдмрд┐рдирд╛, рдпрд╣ рдПрдХ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рджрд╛рд╡рд╛ рдирд╣реАрдВ рд╣реИред

рдЕрдм, рдореИрдВ рдпрд╣рд╛рдБ C# рдХреЛ рдкреВрд░реНрдг рд╕реНрд╡рд┐рдлреНрдЯ рд╢реИрд▓реА рдореЗрдВ рдЬрд╛рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рд╣реВрдБред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реЛрдЧрд╛, рдпрд╣ рднреА рдмрд╣реБрдд рд╕рд╛рд░реЗ рдмрджрд▓рд╛рд╡ рдФрд░ рдХрд╛рдо рдХреА рдЬрд░реВрд░рдд рд╣реИред

рдФрд░ рдореМрдЬреВрджрд╛ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛ред

рдЯреЗрдХреНрд╕реНрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рдЕрдВрддрддрдГ рд╕реНрд╡рд┐рдлреНрдЯ рд╢реИрд▓реА рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдк рдХреЛ рдЦреБрд▓рд╛ рдЫреЛрдбрд╝ рджреЗрдВред

рдФрд░ рдореМрдЬреВрджрд╛ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛ред

рд╣рд╛рдБ, рдирд╛рдо System.Rune рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрд▓рдмреНрдз рд╣реИред рдпрд╣ рд╕рдм рд╕рд┐рд░реНрдл рдПрдХ ┬╗рдЕрдЧрд░ рд╣рдо рдЗрд╕реЗ рдЖрдзрд╛ рджрд╢рдХ рдкреБрд░рд╛рдирд╛ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдмреЗрд╣рддрд░ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ┬л.

рдФрд░ рдореМрдЬреВрджрд╛ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛ред

рдПрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдпрджрд┐ рдореМрдЬреВрджрд╛ рдирд╛рдо рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдП рдЬрд╛рдиреЗ рдереЗ, рддреЛ рдЖрдк рдореМрдЬреВрджрд╛ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рд▓рдХреНрд╖реНрдпреАрдХрд░рдг рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ .NET Core 3.0/3.1, рдЬрд╣рд╛рдВ Rune рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрдпреЛрдЧ рдореЗрдВ рд╣реИ, рдлрд┐рд░ рднреА рд╕рдВрдЧрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрдмрдХрд┐ рдпрд╣ рднреА рдореМрдЬреВрдж рд╣реИ рдмрд╛рдж рдХреЗ рд▓рдХреНрд╖реНрдп рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдирд╛рдо?

рдФрд░ рдореМрдЬреВрджрд╛ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛ред

рдЬреИрд╕рд╛ рдХрд┐ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореИрдВ рд╕рд┐рд░реНрдл рд╕рд┐рджреНрдзрд╛рдВрдд рдФрд░ рдЖрджрд░реНрд╢рд╡рд╛рдж рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдмрд╣рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЪреАрдЬреЛрдВ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдХрд╛ рднрд░рдкреВрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрди рд╕рдм рдореЗрдВ рдХреБрдЫ рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реИрдВ:

  • рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рд╕реНрд╡рд┐рдлреНрдЯ-рд╕реНрдЯрд╛рдЗрд▓ рдЬрд╛рдиреЗ рд╕реЗ рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЯреВрдЯ рдЬрд╛рдПред рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж String рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЕрдзрд┐рдХ рдЧрдгрдирд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдмрд╛рдд рд╣реИред рдореЗрд░рд╛ рдорддрд▓рдм рдХрдЯреНрдЯрд░рдкрдВрдереА рдЪреАрдЬреЛрдВ рд╕реЗ рдирд╣реАрдВ рд╣реИ рдЬреИрд╕реЗ System.Char рдХреЛ рдЧреНрд░реИрдлреЗрдо рдХреНрд▓рд╕реНрдЯрд░ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдмрджрд▓рдирд╛ рдпрд╛ рдЙрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдХреБрдЫ рдРрд╕реА рдЪреАрдЬред
  • рдпрджрд┐ рдореМрдЬреВрджрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд╛рдо рдЬреИрд╕реЗ System.Char рдХреЛ рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рддреЛ рд╣рд╛рдБ, рдпрд╣ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдмреНрд░реЗрдХрд┐рдВрдЧ рдмрджрд▓рд╛рд╡ рд╣реЛрдЧрд╛ред рдФрд░ рдЙрд╕ рдкрд░ рдПрдХ рдЧреИрд░ рдЬрд┐рдореНрдореЗрджрд╛рд░рд╛рдирд╛ рдмрджрд▓рд╛рд╡ред рдореИрдВ рд╡рд╣рд╛рдБ рддреБрдореНрд╣рд╛рд░реЗ рд╕рд╛рде рд╣реВрдБред
  • рдПрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ .NET Core 4.0, SemVer рдореЗрдВ рдмреЛрд▓рддреЗ рд╣реБрдП, рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╡рд╣ рдЪрд╛рд╣рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ 4.0 рддрдХ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдЗрддрдиреЗ рдбрд░рд╛рд╡рдиреЗ рдирд╣реАрдВ рд╣реИрдВ: System.Rune рдХреЛ System.UnicodeScalar рдпрд╛ рдЬреЛ рднреА рдирд╛рдо рд╣реЛрдЧрд╛, рдХреЗ рд▓рд┐рдП рдПрдХ рдкрджрд╛рд╡рдирдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрдирд╛рдо рдореЗрдВ рдмрджрд▓ рджреЗрдВред Rune рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдореЗрдВ рдПрдХ рдореВрд▓реНрдпрд╣реНрд░рд╛рд╕ рдиреЛрдЯ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рдФрд░ рдирдпрд╛ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдмреЗрд╣рддрд░-рдирд╛рдо рд╡рд╛рд▓реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдПрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ 4.0 рддреЛ рдмрд╕ Rune рдЧрд┐рд░ рдЬрд╛рддрд╛ рд╣реИред
  • рдЗрд╕реА рддрд░рд╣, System.Char рдХреЛ System.CodeUnit16 рдпрд╛ рдХреБрдЫ рдФрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдирд╛рдо рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  • рдЗрд╕реЗ рд╕реНрд╡рд┐рдлреНрдЯ-рд╕реНрдЯрд╛рдЗрд▓ рдХрд░рдиреЗ рд╕реЗ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдорд┐рд╢реНрд░рдг рдореЗрдВ System.GraphemeCluster рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИред
  • рдЗрди рд╕рднреА рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ, рдирдП рдХреАрд╡рд░реНрдб рдЙрдкрдирд╛рдореЛрдВ рдХрд╛ рдкрд░рд┐рдЪрдп рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣рд╛рдБ рд╕рд┐рд░реНрдл рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдЦрд╛рдирд╛ рдЫреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ System.Rune , рдЬрдмрдХрд┐ рдЗрд╕рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдЦрд░рд╛рдм рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд╛рдо, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд┐рдЫрд▓реА рдирд╛рдордХрд░рдг рд╕реНрдерд┐рддрд┐ рдХреЛ рдФрд░ рднреА рдЦрд░рд╛рдм рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдЖрдЦрд┐рд░рдХрд╛рд░ рд╕рднреА рдпреВрдирд┐рдХреЛрдб рд╕реНрдХреЗрд▓рд░ рдХреЛ рдПрдиреНрдХреЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдПрдХ рдЙрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рдпреВрдирд┐рдХреЛрдб рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдФрд░ рдирд╛рдордХрд░рдг рдХреА рдкреНрд░рд╡реГрддреНрддрд┐ рдХреЛ рдлреИрд▓рд╛рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрд╡рд╕рд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдПрдХ рдЕрд╡рд╕рд░ рдпрд╣рд╛рдВ рд╣рд░ рдХреЛрдИ рдЕрд▓рдЧ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реИред

рд╣рд╛рдп рд╕рдм - рдирд╛рдо System.Text.Rune рд╡рд╣ рд╣реИ рдЬрд┐рд╕реЗ рд╢рд┐рдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╣рдо рдЖрдЧреЗ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред Rune рдХреЗ рдмрдЬрд╛рдп UnicodeScalar рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдорд╣рддреНрд╡рдкреВрд░реНрдг (рдФрд░ рдЧрд░реНрдо!) рдкрд╣рд▓реЗ рдЪрд░реНрдЪрд╛ рд╣реБрдИ Rune , рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ Rune рдЬреАрдд рдЧрдИред рдЯреАрдо рдЗрд╕ рд╕рдордп рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рджреВрд╕рд░рд╛ рдирд╛рдо рдЪреБрдирдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░ рд░рд╣реА рд╣реИред рдФрд░ рдЬрдм рдореИрдВ рдЬрд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рд▓реЛрдЧ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднрд╛рд╡реБрдХ рд╣реИрдВ рдФрд░ рд╣рдо рдпрд╣рд╛рдВ рдмрд╛рддрдЪреАрдд рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗ, рдЕрдВрддрддрдГ рдЗрд╕ рдмрд╛рдд рд╕реЗ рдЕрд╡рдЧрдд рд░рд╣реЗрдВ рдХрд┐ рдирд╛рдордХрд░рдг рдХреЗ рдореБрджреНрджреЗ рдкрд░ рдореБрдХрджрдореЗрдмрд╛рдЬреА рдЬрд╛рд░реА рд░рдЦрдиреЗ рдореЗрдВ рдЦрд░реНрдЪ рдХреА рдЧрдИ рдХреЛрдИ рднреА рдКрд░реНрдЬрд╛ рд▓рд╛рднрд╛рдВрд╢ рдирд╣реАрдВ рджреЗрдЧреАред

рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП, рдФрд░ рдбреЙрдХреНрд╕ рдХреЗ рдЕрдиреБрд╕рд╛рд░: .NET рдореЗрдВ System.Text.Rune рдкреНрд░рдХрд╛рд░ рдмрд┐рд▓реНрдХреБрд▓ рдпреВрдирд┐рдХреЛрдб рд╕реНрдХреЗрд▓рд░ рдорд╛рди рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдпрд╣ рдирд┐рд░реНрдорд╛рдг рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕реНрд╡рд┐рдлреНрдЯ рдХреЗ UnicodeScalar рдкреНрд░рдХрд╛рд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЗрд╕реЗ рдЧреЛ рдХреЗ rune рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдзрд┐рдХ рдЕрдиреБрд░реВрдк рдмрдирд╛рддрд╛ рд╣реИред

Rune рдбреЙрдХреНрд╕ рдореЗрдВ рдПрдХ рдЕрдиреБрднрд╛рдЧ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ .NET рдореЗрдВ рдЕрдиреНрдп рдЯреЗрдХреНрд╕реНрдЯ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдПрдкреАрдЖрдИ рдФрд░ рдпреВрдирд┐рдХреЛрдб рдореЗрдВ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рд╕реЗ рдХреИрд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ https://github.com/dotnet/docs/issues/15845 рдкрд░ рд╣реИред рдЙрд╕ рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдЕрд╡рдзрд╛рд░рдгрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЗ рд╡рд░реНрддрдорд╛рди рдорд╕реМрджреЗ рдХрд╛ рдПрдХ рд▓рд┐рдВрдХ рднреА рд╣реИред

рдореЗрд░реЗ рд▓рд┐рдП UnicodeScalar рдХреЗ рд╕рд╛рде рдореБрдЦреНрдп рджреЛрд╖ рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд╛рдо рдХреА рд▓рдВрдмрд╛рдИ рдФрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛рд╕рд╛рдЗрдЬ рдХреЗ рдмреАрдЪ рдмрдбрд╝реА рдЕрд╕рдорд╛рдирддрд╛ рд╣реИред рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдпрд╣ рдПрдХ int рд╣реИ рдЬрд┐рд╕рдХреЗ рдбреЛрдореЗрди рдореЗрдВ рдХреБрдЫ рдЕрдВрддрд░рд╛рд▓ рд╣реИрдВред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЙрдкрдпреЛрдЧ рдореЗрдВ рд╡рд╛рдЪрд╛рд▓рддрд╛ рдЪрд░рдо рдкрд░ рд╣реЛрдЧреА:

foreach (UnicodeScalar unicodeScalar in name.EnumerateUnicodeScalars())
{
     // ... unicodeScalar contains 1 int
}

рдмрдирд╛рдо рдмрд░рд╛рдмрд░ char рдПрдХ string рд╕реЗ рдЕрдзрд┐рдХ (рдФрд░ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рд▓реЛрдЧ char рд╕реЗ рдЕрдзрд┐рдХ рдирдП рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдорд╛рди рд░рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╕рдВрдкреВрд░реНрдг рдорд╛рди рд╣реИрдВ)

foreach (char c in name)
{
     // ... c contains 1 ushort
}

рд░реВрдг рдкреНрд░рдХрд╛рд░ рдирд╛рдо рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдХ рд╕рдордЭреМрддрд╛ рд╣реИ:

foreach (Rune rune in name.EnumerateRunes())
{
     // ... rune contains 1 int
}

@GrabYourPitchforks

рдирдорд╕реНрдХрд╛рд░! рд╕рдЪ рдХрд╣реВрдВ рддреЛ, рдореИрдВ рдЗрд╕ рддрд░реНрдХ рдореЗрдВ рдлрдВрд╕ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ .NET рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдЬрд╣рд╛рдЬ рдЪрд▓рд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдХрд┐ рдореИрдВ рдЕрдкрдиреА рд░рд╛рдп рд╡реНрдпрдХреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ рдЕрдиреНрдп рдЬреЛ рдЗрд╕рд╕реЗ рдЕрд╕рд╣рдордд рдереЗред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реИ рдХрд┐ рд╕реА # рдореЗрдВ рдЕрдВрддрддрдГ рдПрдХ _real_ рдЪрд░рд┐рддреНрд░ рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬреЛ рдЯреВрдЯреЗ рд╣реБрдП рдЪрд░рд┐рддреНрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИ, рдФрд░ рдпрд╣ рдирд╛рдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд╛рдзреНрдпрдорд┐рдХ рд╣реИред рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдФрд░ рд╕рдЯреАрдХрддрд╛ рдХреЗ рдмреАрдЪ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╕рдВрддреБрд▓рди рдмрдирд╛рдирд╛ рд╣реИ, рдФрд░ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЗрд╕реЗ рдХрд╣реАрдВ CodePoint рдХреЗ рдЖрд╕рдкрд╛рд╕ рд░рдЦ рджреЗрддрд╛, рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдиреНрдп рд▓реЛрдЧ рдЕрд╕рд╣рдордд рдХреНрдпреЛрдВ рд╣реЛрдВрдЧреЗред

рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕реЗ, рдореИрдВ .NET рдХреЗ рдпреВрдирд┐рдХреЛрдб рд╕рдорд░реНрдерди рдХреЗ рдЖрдзреБрдирд┐рдХреАрдХрд░рдг рдореЗрдВ рдХрдбрд╝реА рдореЗрд╣рдирдд рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдзрдиреНрдпрд╡рд╛рдж рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ! рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рджреБрдирд┐рдпрд╛ рднрд░ рдореЗрдВ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝рд╛ рдЕрдВрддрд░ рдмрдирд╛рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕