Char 구조체

정의

UTF-16 코드 단위인 문자를 나타냅니다.

public value class char : IComparable, IComparable<char>, IConvertible, IEquatable<char>
public value class char : IComparable, IComparable<char>, IConvertible, IEquatable<char>, ISpanFormattable
public value class char : IComparable, IConvertible
public value class char : IComparable, IComparable<char>, IEquatable<char>
public struct Char : IComparable, IComparable<char>, IConvertible, IEquatable<char>
public struct Char : IComparable, IComparable<char>, IConvertible, IEquatable<char>, ISpanFormattable
[System.Serializable]
public struct Char : IComparable, IConvertible
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public struct Char : IComparable, IComparable<char>, IConvertible, IEquatable<char>
public struct Char : IComparable, IComparable<char>, IEquatable<char>
type char = struct
    interface IConvertible
type char = struct
    interface IConvertible
    interface ISpanFormattable
    interface IFormattable
[<System.Serializable>]
type char = struct
    interface IConvertible
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type char = struct
    interface IConvertible
type char = struct
Public Structure Char
Implements IComparable, IComparable(Of Char), IConvertible, IEquatable(Of Char)
Public Structure Char
Implements IComparable, IComparable(Of Char), IConvertible, IEquatable(Of Char), ISpanFormattable
Public Structure Char
Implements IComparable, IConvertible
Public Structure Char
Implements IComparable, IComparable(Of Char), IEquatable(Of Char)
상속
특성
구현

예제

다음 코드 예제에서는의 일부 메서드를 보여 줍니다 Char .

using namespace System;
int main()
{
   char chA = 'A';
   char ch1 = '1';
   String^ str =  "test string";
   Console::WriteLine( chA.CompareTo( 'B' ) ); // Output: "-1" (meaning 'A' is 1 less than 'B')
   Console::WriteLine( chA.Equals( 'A' ) ); // Output: "True"
   Console::WriteLine( Char::GetNumericValue( ch1 ) ); // Output: "1"
   Console::WriteLine( Char::IsControl( '\t' ) ); // Output: "True"
   Console::WriteLine( Char::IsDigit( ch1 ) ); // Output: "True"
   Console::WriteLine( Char::IsLetter( ',' ) ); // Output: "False"
   Console::WriteLine( Char::IsLower( 'u' ) ); // Output: "True"
   Console::WriteLine( Char::IsNumber( ch1 ) ); // Output: "True"
   Console::WriteLine( Char::IsPunctuation( '.' ) ); // Output: "True"
   Console::WriteLine( Char::IsSeparator( str, 4 ) ); // Output: "True"
   Console::WriteLine( Char::IsSymbol( '+' ) ); // Output: "True"
   Console::WriteLine( Char::IsWhiteSpace( str, 4 ) ); // Output: "True"
   Console::WriteLine( Char::Parse(  "S" ) ); // Output: "S"
   Console::WriteLine( Char::ToLower( 'M' ) ); // Output: "m"
   Console::WriteLine( 'x' ); // Output: "x"
}
using System;

public class CharStructureSample
{
    public static void Main()
    {
        char chA = 'A';
        char ch1 = '1';
        string str = "test string";

        Console.WriteLine(chA.CompareTo('B'));          //-----------  Output: "-1" (meaning 'A' is 1 less than 'B')
        Console.WriteLine(chA.Equals('A'));             //-----------  Output: "True"
        Console.WriteLine(Char.GetNumericValue(ch1));   //-----------  Output: "1"
        Console.WriteLine(Char.IsControl('\t'));        //-----------  Output: "True"
        Console.WriteLine(Char.IsDigit(ch1));           //-----------  Output: "True"
        Console.WriteLine(Char.IsLetter(','));          //-----------  Output: "False"
        Console.WriteLine(Char.IsLower('u'));           //-----------  Output: "True"
        Console.WriteLine(Char.IsNumber(ch1));          //-----------  Output: "True"
        Console.WriteLine(Char.IsPunctuation('.'));     //-----------  Output: "True"
        Console.WriteLine(Char.IsSeparator(str, 4));    //-----------  Output: "True"
        Console.WriteLine(Char.IsSymbol('+'));          //-----------  Output: "True"
        Console.WriteLine(Char.IsWhiteSpace(str, 4));   //-----------  Output: "True"
        Console.WriteLine(Char.Parse("S"));             //-----------  Output: "S"
        Console.WriteLine(Char.ToLower('M'));           //-----------  Output: "m"
        Console.WriteLine('x'.ToString());              //-----------  Output: "x"
    }
}
open System

let chA = 'A'
let ch1 = '1'
let str = "test string"

printfn $"{chA.CompareTo 'B'}"          //-----------  Output: "-1" (meaning 'A' is 1 less than 'B')
printfn $"{chA.Equals 'A'}"             //-----------  Output: "True"
printfn $"{Char.GetNumericValue ch1}"   //-----------  Output: "1"
printfn $"{Char.IsControl '\t'}"        //-----------  Output: "True"
printfn $"{Char.IsDigit ch1}"           //-----------  Output: "True"
printfn $"{Char.IsLetter ','}"          //-----------  Output: "False"
printfn $"{Char.IsLower 'u'}"           //-----------  Output: "True"
printfn $"{Char.IsNumber ch1}"          //-----------  Output: "True"
printfn $"{Char.IsPunctuation '.'}"     //-----------  Output: "True"
printfn $"{Char.IsSeparator(str, 4)}"   //-----------  Output: "True"
printfn $"{Char.IsSymbol '+'}"          //-----------  Output: "True"
printfn $"{Char.IsWhiteSpace(str, 4)}"  //-----------  Output: "True"
printfn $"""{Char.Parse "S"}"""         //-----------  Output: "S"
printfn $"{Char.ToLower 'M'}"           //-----------  Output: "m"
printfn $"{'x'}"                        //-----------  Output: "x"
Module CharStructure

    Public Sub Main()

        Dim chA As Char
        chA = "A"c
        Dim ch1 As Char
        ch1 = "1"c
        Dim str As String
        str = "test string"

        Console.WriteLine(chA.CompareTo("B"c))          ' Output: "-1" (meaning 'A' is 1 less than 'B')
        Console.WriteLine(chA.Equals("A"c))             ' Output: "True"
        Console.WriteLine(Char.GetNumericValue(ch1))    ' Output: "1"
        Console.WriteLine(Char.IsControl(Chr(9)))       ' Output: "True"
        Console.WriteLine(Char.IsDigit(ch1))            ' Output: "True"
        Console.WriteLine(Char.IsLetter(","c))          ' Output: "False"
        Console.WriteLine(Char.IsLower("u"c))           ' Output: "True"
        Console.WriteLine(Char.IsNumber(ch1))           ' Output: "True"
        Console.WriteLine(Char.IsPunctuation("."c))     ' Output: "True"
        Console.WriteLine(Char.IsSeparator(str, 4))     ' Output: "True"
        Console.WriteLine(Char.IsSymbol("+"c))          ' Output: "True"
        Console.WriteLine(Char.IsWhiteSpace(str, 4))    ' Output: "True"
        Console.WriteLine(Char.Parse("S"))              ' Output: "S"
        Console.WriteLine(Char.ToLower("M"c))           ' Output: "m"
        Console.WriteLine("x"c.ToString())              ' Output: "x"

    End Sub

End Module

설명

.NET에서는 구조체를 사용 하 여 Char utf-16 인코딩을 사용 하 여 유니코드 코드 요소를 나타냅니다. 개체의 값은 Char 16 비트 숫자 (서 수) 값입니다.

유니코드, 스칼라 값, 코드 요소, 서로게이트 쌍, u t f-16 및 형식에 익숙하지 않은 경우 Rune .net의 문자 인코딩 소개를 참조 하세요.

다음 섹션에서는 개체와 문자 간의 관계를 검토 Char 하 고 인스턴스를 사용 하 여 수행 되는 몇 가지 일반적인 태스크에 대해 설명 합니다 Char . Rune이러한 작업 중 일부를 수행 하는 대신 .Net Core 3.0에 도입 된 형식을 고려 하는 것이 좋습니다 Char .

Char 개체, 유니코드 문자 및 문자열

String개체는 Char 텍스트 문자열을 나타내는 구조체의 순차적인 컬렉션입니다. 대부분의 유니코드 문자는 단일 개체로 나타낼 수 Char 있지만 기본 문자, 서로게이트 쌍 및/또는 조합 문자 시퀀스로 인코딩된 문자는 여러 개체로 표현 됩니다 Char . 따라서 Char 개체의 구조는 String 단일 유니코드 문자와 반드시 일치 하지는 않습니다.

여러 16 비트 코드 단위는 다음과 같은 경우에 단일 유니코드 문자를 나타내는 데 사용 됩니다.

  • 문자 모양-단일 문자 또는 기본 문자 다음에 하나 이상의 결합 문자를 따라 구성 될 수 있습니다. 예를 들어, ä 문자는 Char 코드 단위가 u + 0061 다음에 Char 코드 단위가 u + 0308 인 개체가 나타내는 개체로 표현 됩니다. 문자 ä는 Char U + 00E4의 코드 단위가 있는 단일 개체에 의해 정의 될 수도 있습니다. 다음 예에서는 문자 ä가 두 개체로 구성 되어 있음을 보여 줍니다 Char .

    using System;
    using System.IO;
    
    public class Example
    {
       public static void Main()
       {
          StreamWriter sw = new StreamWriter("chars1.txt");
          char[] chars = { '\u0061', '\u0308' };
          string strng = new String(chars);
          sw.WriteLine(strng);
          sw.Close();
       }
    }
    // The example produces the following output:
    //       ä
    
    open System
    open System.IO
    
    let sw = new StreamWriter("chars1.txt")
    let chars = [| '\u0061'; '\u0308' |]
    let string = String chars
    sw.WriteLine string
    sw.Close()
    
    // The example produces the following output:
    //       ä
    
    Imports System.IO
    
    Module Example
       Public Sub Main()
          Dim sw As New StreamWriter("chars1.txt")
          Dim chars() As Char = { ChrW(&h0061), ChrW(&h0308) }
          Dim strng As New String(chars)
          sw.WriteLine(strng) 
          sw.Close()
       End Sub
    End Module
    ' The example produces the following output:
    '       ä
    
  • 유니코드 기본 다국어 평면 (BMP) 외부 문자. 유니코드는 평면 0을 나타내는 BMP 외에 16 개 평면을 지원 합니다. 유니코드 코드 포인트는 u t f-32으로 평면을 포함 하는 21 비트 값으로 표현 됩니다. 예를 들어 U + 1D160은 음악 기호 여덟 번째 메모 문자를 나타냅니다. UTF-16 인코딩에는 16 비트만 있으므로 BMP 외부의 문자는 u t f-16에서 서로게이트 쌍으로 표현 됩니다. 다음 예제에서는 U + 1D160, 음악 기호 여덟 번째 문자에 해당 하는 u t f-32가 U + D834 U + DD60 임을 보여 줍니다. U + D834는 상위 서로게이트입니다. 높은 서로게이트 범위는 U + D 800 U + DBFF 까지입니다. U + DD60는 하위 서로게이트입니다. 하위 서로게이트 범위는 U + D C 00 U + DFFF 까지입니다.

    using System;
    using System.IO;
    
    public class Example
    {
       public static void Main()
       {
          StreamWriter sw = new StreamWriter(@".\chars2.txt");
          int utf32 = 0x1D160;
          string surrogate = Char.ConvertFromUtf32(utf32);
          sw.WriteLine("U+{0:X6} UTF-32 = {1} ({2}) UTF-16",
                       utf32, surrogate, ShowCodePoints(surrogate));
          sw.Close();
       }
    
       private static string ShowCodePoints(string value)
       {
          string retval = null;
          foreach (var ch in value)
             retval += String.Format("U+{0:X4} ", Convert.ToUInt16(ch));
    
          return retval.Trim();
       }
    }
    // The example produces the following output:
    //       U+01D160 UTF-32 = ð (U+D834 U+DD60) UTF-16
    
    open System
    open System.IO
    
    let showCodePoints (value: char seq) =
        let str =
            value
            |> Seq.map (fun ch -> $"U+{Convert.ToUInt16 ch:X4}")
            |> String.concat ""
        str.Trim()
    
    let sw = new StreamWriter(@".\chars2.txt")
    let utf32 = 0x1D160
    let surrogate = Char.ConvertFromUtf32 utf32
    sw.WriteLine $"U+{utf32:X6} UTF-32 = {surrogate} ({showCodePoints surrogate}) UTF-16"
    sw.Close()
    
    // The example produces the following output:
    //       U+01D160 UTF-32 = ð (U+D834 U+DD60) UTF-16
    
    Imports System.IO
    
    Module Example
       Public Sub Main()
          Dim sw As New StreamWriter(".\chars2.txt")
          Dim utf32 As Integer = &h1D160
          Dim surrogate As String = Char.ConvertFromUtf32(utf32)
          sw.WriteLine("U+{0:X6} UTF-32 = {1} ({2}) UTF-16", 
                       utf32, surrogate, ShowCodePoints(surrogate))
          sw.Close()                    
       End Sub
    
       Private Function ShowCodePoints(value As String) As String
          Dim retval As String = Nothing
          For Each ch In value
             retval += String.Format("U+{0:X4} ", Convert.ToUInt16(ch))
          Next
          Return retval.Trim()
       End Function
    End Module
    ' The example produces the following output:
    '       U+01D160 UTF-32 = ð (U+D834 U+DD60) UTF-16
    

문자 및 문자 범주

각 유니코드 문자 또는 유효한 서로게이트 쌍은 유니코드 범주에 속합니다. .NET에서 유니코드 범주는 열거형의 멤버로 표현 되며 예를 들어, UnicodeCategory 및와 같은 값을 포함 UnicodeCategory.CurrencySymbol UnicodeCategory.LowercaseLetter UnicodeCategory.SpaceSeparator 합니다.

문자의 유니코드 범주를 확인 하려면 메서드를 호출 GetUnicodeCategory 합니다. 예를 들어 다음 예제에서는를 호출 GetUnicodeCategory 하 여 문자열의 각 문자에 대 한 유니코드 범주를 표시 합니다. 이 예제는 인스턴스에 서로게이트 쌍이 없는 경우에만 제대로 작동 합니다 String .

using System;
using System.Globalization;

class Example
{
   public static void Main()
   {
      // Define a string with a variety of character categories.
      String s = "The red car drove down the long, narrow, secluded road.";
      // Determine the category of each character.
      foreach (var ch in s)
         Console.WriteLine("'{0}': {1}", ch, Char.GetUnicodeCategory(ch));
   }
}
// The example displays the following output:
//      'T': UppercaseLetter
//      'h': LowercaseLetter
//      'e': LowercaseLetter
//      ' ': SpaceSeparator
//      'r': LowercaseLetter
//      'e': LowercaseLetter
//      'd': LowercaseLetter
//      ' ': SpaceSeparator
//      'c': LowercaseLetter
//      'a': LowercaseLetter
//      'r': LowercaseLetter
//      ' ': SpaceSeparator
//      'd': LowercaseLetter
//      'r': LowercaseLetter
//      'o': LowercaseLetter
//      'v': LowercaseLetter
//      'e': LowercaseLetter
//      ' ': SpaceSeparator
//      'd': LowercaseLetter
//      'o': LowercaseLetter
//      'w': LowercaseLetter
//      'n': LowercaseLetter
//      ' ': SpaceSeparator
//      't': LowercaseLetter
//      'h': LowercaseLetter
//      'e': LowercaseLetter
//      ' ': SpaceSeparator
//      'l': LowercaseLetter
//      'o': LowercaseLetter
//      'n': LowercaseLetter
//      'g': LowercaseLetter
//      ',': OtherPunctuation
//      ' ': SpaceSeparator
//      'n': LowercaseLetter
//      'a': LowercaseLetter
//      'r': LowercaseLetter
//      'r': LowercaseLetter
//      'o': LowercaseLetter
//      'w': LowercaseLetter
//      ',': OtherPunctuation
//      ' ': SpaceSeparator
//      's': LowercaseLetter
//      'e': LowercaseLetter
//      'c': LowercaseLetter
//      'l': LowercaseLetter
//      'u': LowercaseLetter
//      'd': LowercaseLetter
//      'e': LowercaseLetter
//      'd': LowercaseLetter
//      ' ': SpaceSeparator
//      'r': LowercaseLetter
//      'o': LowercaseLetter
//      'a': LowercaseLetter
//      'd': LowercaseLetter
//      '.': OtherPunctuation
open System

// Define a string with a variety of character categories.
let s = "The red car drove down the long, narrow, secluded road."
// Determine the category of each character.
for ch in s do
    printfn $"'{ch}': {Char.GetUnicodeCategory ch}"

// The example displays the following output:
//      'T': UppercaseLetter
//      'h': LowercaseLetter
//      'e': LowercaseLetter
//      ' ': SpaceSeparator
//      'r': LowercaseLetter
//      'e': LowercaseLetter
//      'd': LowercaseLetter
//      ' ': SpaceSeparator
//      'c': LowercaseLetter
//      'a': LowercaseLetter
//      'r': LowercaseLetter
//      ' ': SpaceSeparator
//      'd': LowercaseLetter
//      'r': LowercaseLetter
//      'o': LowercaseLetter
//      'v': LowercaseLetter
//      'e': LowercaseLetter
//      ' ': SpaceSeparator
//      'd': LowercaseLetter
//      'o': LowercaseLetter
//      'w': LowercaseLetter
//      'n': LowercaseLetter
//      ' ': SpaceSeparator
//      't': LowercaseLetter
//      'h': LowercaseLetter
//      'e': LowercaseLetter
//      ' ': SpaceSeparator
//      'l': LowercaseLetter
//      'o': LowercaseLetter
//      'n': LowercaseLetter
//      'g': LowercaseLetter
//      ',': OtherPunctuation
//      ' ': SpaceSeparator
//      'n': LowercaseLetter
//      'a': LowercaseLetter
//      'r': LowercaseLetter
//      'r': LowercaseLetter
//      'o': LowercaseLetter
//      'w': LowercaseLetter
//      ',': OtherPunctuation
//      ' ': SpaceSeparator
//      's': LowercaseLetter
//      'e': LowercaseLetter
//      'c': LowercaseLetter
//      'l': LowercaseLetter
//      'u': LowercaseLetter
//      'd': LowercaseLetter
//      'e': LowercaseLetter
//      'd': LowercaseLetter
//      ' ': SpaceSeparator
//      'r': LowercaseLetter
//      'o': LowercaseLetter
//      'a': LowercaseLetter
//      'd': LowercaseLetter
//      '.': OtherPunctuation
Imports System.Globalization

Module Example
   Public Sub Main()
      ' Define a string with a variety of character categories.
      Dim s As String = "The car drove down the narrow, secluded road."
      ' Determine the category of each character.
      For Each ch In s
         Console.WriteLine("'{0}': {1}", ch, Char.GetUnicodeCategory(ch)) 
      Next
   End Sub
End Module
' The example displays the following output:
'       'T': UppercaseLetter
'       'h': LowercaseLetter
'       'e': LowercaseLetter
'       ' ': SpaceSeparator
'       'r': LowercaseLetter
'       'e': LowercaseLetter
'       'd': LowercaseLetter
'       ' ': SpaceSeparator
'       'c': LowercaseLetter
'       'a': LowercaseLetter
'       'r': LowercaseLetter
'       ' ': SpaceSeparator
'       'd': LowercaseLetter
'       'r': LowercaseLetter
'       'o': LowercaseLetter
'       'v': LowercaseLetter
'       'e': LowercaseLetter
'       ' ': SpaceSeparator
'       'd': LowercaseLetter
'       'o': LowercaseLetter
'       'w': LowercaseLetter
'       'n': LowercaseLetter
'       ' ': SpaceSeparator
'       't': LowercaseLetter
'       'h': LowercaseLetter
'       'e': LowercaseLetter
'       ' ': SpaceSeparator
'       'l': LowercaseLetter
'       'o': LowercaseLetter
'       'n': LowercaseLetter
'       'g': LowercaseLetter
'       ',': OtherPunctuation
'       ' ': SpaceSeparator
'       'n': LowercaseLetter
'       'a': LowercaseLetter
'       'r': LowercaseLetter
'       'r': LowercaseLetter
'       'o': LowercaseLetter
'       'w': LowercaseLetter
'       ',': OtherPunctuation
'       ' ': SpaceSeparator
'       's': LowercaseLetter
'       'e': LowercaseLetter
'       'c': LowercaseLetter
'       'l': LowercaseLetter
'       'u': LowercaseLetter
'       'd': LowercaseLetter
'       'e': LowercaseLetter
'       'd': LowercaseLetter
'       ' ': SpaceSeparator
'       'r': LowercaseLetter
'       'o': LowercaseLetter
'       'a': LowercaseLetter
'       'd': LowercaseLetter
'       '.': OtherPunctuation

내부적으로 ASCII 범위 밖의 문자 (U + 0000 ~ U + 00FF)의 경우 GetUnicodeCategory 메서드는 클래스에서 보고 한 유니코드 범주에 따라 달라 집니다 CharUnicodeInfo . .NET Framework 4.6.2 부터는 유니코드 표준 8.0.0 버전에 따라 유니코드 문자가 분류 됩니다. .NET Framework 4에서 .NET Framework 4.6.1 .NET Framework 버전은 유니코드 표준 6.3.0 버전에 따라 분류 됩니다.

문자 및 텍스트 요소

단일 문자를 여러 개체로 나타낼 수 있으므로 Char 개별 개체를 사용 하는 것이 항상 의미가 있는 것은 아닙니다 Char . 예를 들어 다음 예제에서는 Aegean 숫자 0에서 9까지 나타내는 유니코드 코드 요소를 u t f-16으로 인코딩된 코드 단위로 변환 합니다. 잘못 된 개체를 문자와 동일 하 게 간주 하기 때문에 Char 결과 문자열에 20 자가 있음을 보고 합니다.

using System;

public class Example
{
   public static void Main()
   {
      string result = String.Empty;
      for (int ctr = 0x10107; ctr <= 0x10110; ctr++)  // Range of Aegean numbers.
         result += Char.ConvertFromUtf32(ctr);

      Console.WriteLine("The string contains {0} characters.", result.Length);
   }
}
// The example displays the following output:
//     The string contains 20 characters.
open System

let result =
    [ for i in 0x10107..0x10110 do  // Range of Aegean numbers.
        Char.ConvertFromUtf32 i ]
    |> String.concat ""

printfn $"The string contains {result.Length} characters."


// The example displays the following output:
//     The string contains 20 characters.
Module Example
   Public Sub Main()
      Dim result As String = String.Empty
      For ctr As Integer = &h10107 To &h10110     ' Range of Aegean numbers.
         result += Char.ConvertFromUtf32(ctr)
      Next         
      Console.WriteLine("The string contains {0} characters.", result.Length) 
   End Sub
End Module
' The example displays the following output:
'     The string contains 20 characters.

다음 작업을 수행 하 여 개체가 단일 문자를 나타내는 가정을 피할 수 있습니다 Char .

  • String개별 문자로 작업 하는 대신 개체를 전체적으로 사용 하 여 언어 내용을 나타내고 분석할 수 있습니다.

  • String.EnumerateRunes다음 예제와 같이를 사용할 수 있습니다.

    int CountLetters(string s)
    {
        int letterCount = 0;
    
        foreach (Rune rune in s.EnumerateRunes())
        {
            if (Rune.IsLetter(rune))
            { letterCount++; }
        }
    
        return letterCount;
    }
    
    let countLetters (s: string) =
        let mutable letterCount = 0
    
        for rune in s.EnumerateRunes() do
            if Rune.IsLetter rune then
                letterCount <- letterCount + 1
    
        letterCount
    
  • 클래스를 사용 StringInfo 하 여 개별 개체 대신 텍스트 요소 작업을 수행할 수 있습니다 Char . 다음 예제에서는 개체를 사용 하 여 StringInfo Aegean 숫자 0에서 9까지 구성 된 문자열의 텍스트 요소 수를 계산 합니다. 서로게이트 쌍은 단일 문자를 고려 하기 때문에 문자열에 10 자가 포함 된 것으로 올바르게 보고 됩니다.

    using System;
    using System.Globalization;
    
    public class Example
    {
       public static void Main()
       {
          string result = String.Empty;
          for (int ctr = 0x10107; ctr <= 0x10110; ctr++)  // Range of Aegean numbers.
             result += Char.ConvertFromUtf32(ctr);
    
          StringInfo si = new StringInfo(result);
          Console.WriteLine("The string contains {0} characters.",
                            si.LengthInTextElements);
       }
    }
    // The example displays the following output:
    //       The string contains 10 characters.
    
    open System
    open System.Globalization
    
    let result =
        [ for i in 0x10107..0x10110 do  // Range of Aegean numbers.
            Char.ConvertFromUtf32 i ]
        |> String.concat ""
    
    
    let si = StringInfo result
    printfn $"The string contains {si.LengthInTextElements} characters."
    
    // The example displays the following output:
    //       The string contains 10 characters.
    
    Imports System.Globalization
    
    Module Example
       Public Sub Main()
          Dim result As String = String.Empty
          For ctr As Integer = &h10107 To &h10110     ' Range of Aegean numbers.
             result += Char.ConvertFromUtf32(ctr)
          Next         
          Dim si As New StringInfo(result)
          Console.WriteLine("The string contains {0} characters.", si.LengthInTextElements) 
       End Sub
    End Module
    ' The example displays the following output:
    '       The string contains 10 characters.
    
  • 문자열에 조합 문자가 하나 이상 포함 된 기본 문자가 포함 된 경우 메서드를 호출 String.Normalize 하 여 부분 문자열을 단일 utf-16 인코딩된 코드 단위로 변환할 수 있습니다. 다음 예제에서는 메서드를 호출 String.Normalize 하 여 기본 문자 u + 0061 (라틴어 소문자 a)를 변환 하 고 문자 u + 0308 (DIAERESIS 결합)를 u + 00E4로 변환 합니다 (라틴어 소문자 A a DIAERESIS).

    using System;
    
    public class Example
    {
       public static void Main()
       {
          string combining = "\u0061\u0308";
          ShowString(combining);
    
          string normalized = combining.Normalize();
          ShowString(normalized);
       }
    
       private static void ShowString(string s)
       {
          Console.Write("Length of string: {0} (", s.Length);
          for (int ctr = 0; ctr < s.Length; ctr++) {
             Console.Write("U+{0:X4}", Convert.ToUInt16(s[ctr]));
             if (ctr != s.Length - 1) Console.Write(" ");
          }
          Console.WriteLine(")\n");
       }
    }
    // The example displays the following output:
    //       Length of string: 2 (U+0061 U+0308)
    //
    //       Length of string: 1 (U+00E4)
    
    open System
    
    let showString (s: string) =
        printf $"Length of string: {s.Length} ("
        for i = 0 to s.Length - 1 do
            printf $"U+{Convert.ToUInt16 s[i]:X4}"
            if i <> s.Length - 1 then printf " "
        printfn ")\n"
    
    let combining = "\u0061\u0308"
    showString combining
    
    let normalized = combining.Normalize()
    showString normalized
    
    // The example displays the following output:
    //       Length of string: 2 (U+0061 U+0308)
    //
    //       Length of string: 1 (U+00E4)
    
    Module Example
       Public Sub Main()
          Dim combining As String = ChrW(&h0061) + ChrW(&h0308)
          ShowString(combining)
          
          Dim normalized As String = combining.Normalize()
          ShowString(normalized)
       End Sub
       
       Private Sub ShowString(s As String)
          Console.Write("Length of string: {0} (", s.Length)
          For ctr As Integer = 0 To s.Length - 1
             Console.Write("U+{0:X4}", Convert.ToUInt16(s(ctr)))
             If ctr <> s.Length - 1 Then Console.Write(" ")
          Next 
          Console.WriteLine(")")
          Console.WriteLine()
       End Sub
    End Module
    ' The example displays the following output:
    '       Length of string: 2 (U+0061 U+0308)
    '       
    '       Length of string: 1 (U+00E4)
    

일반 작업

Char구조체는 개체를 비교 하 고 Char , 현재 개체의 값을 Char 다른 형식의 개체로 변환 하 고, 개체의 유니코드 범주를 확인 하는 메서드를 제공 합니다 Char .

원하는 작업 다음 System.Char 방법 사용
Char개체 비교 CompareToEquals
코드 포인트를 문자열로 변환 ConvertFromUtf32

또한 형식을 참조 하세요 Rune .
Char개체 또는 개체의 서로게이트 쌍을 Char 코드 점으로 변환 단일 문자: Convert.ToInt32(Char)

서로게이트 쌍 또는 문자열의 문자: Char.ConvertToUtf32

또한 형식을 참조 하세요 Rune .
문자의 유니코드 범주를 가져옵니다. GetUnicodeCategory

Rune.GetUnicodeCategory을 참조하세요.
문자가 숫자, 문자, 문장 부호, 제어 문자 등의 특정 유니코드 범주에 있는지 여부를 확인 합니다. IsControl,,,,,,,,,,,,, IsDigit IsHighSurrogate IsLetter IsLetterOrDigit IsLower IsLowSurrogate IsNumber IsPunctuation IsSeparator IsSurrogate IsSurrogatePair IsSymbol IsUpperIsWhiteSpace

또한 형식에 대 한 해당 메서드를 참조 하세요 Rune .
숫자 Char 를 나타내는 개체를 숫자 값 형식으로 변환 합니다. GetNumericValue

Rune.GetNumericValue을 참조하세요.
문자열의 문자를 Char 개체로 변환 ParseTryParse
개체를 Char String 개체로 변환 ToString
개체의 대/소문자 변경 Char ToLower, ToLowerInvariant, ToUpperToUpperInvariant

또한 형식에 대 한 해당 메서드를 참조 하세요 Rune .

Char 값 및 interop

Char유니코드 u t f-16으로 인코딩된 코드 단위로 표시 되는 관리 되는 형식이 비관리 코드에 전달 되는 경우 interop 마샬러는 기본적으로 문자 집합을 ANSI로 변환 합니다. DllImportAttribute특성을 플랫폼 호출 선언에 적용 하 고 특성을 StructLayoutAttribute COM interop 선언에 적용 하 여 마샬링된 형식이 사용할 문자 집합을 제어할 수 있습니다 Char .

필드

MaxValue

Char의 가능한 최대값을 나타냅니다. 이 필드는 상수입니다.

MinValue

Char의 최소값을 나타냅니다. 이 필드는 상수입니다.

메서드

CompareTo(Char)

이 인스턴스를 지정된 Char 개체와 비교하고 정렬 순서에서 이 인스턴스의 위치가 지정된 Char 개체보다 앞인지, 뒤인지 또는 동일한지를 나타냅니다.

CompareTo(Object)

이 인스턴스를 지정된 개체와 비교하고 정렬 순서에서 이 인스턴스의 위치가 지정된 Object 개체보다 앞인지, 뒤인지 또는 동일한지를 나타냅니다.

ConvertFromUtf32(Int32)

지정된 유니코드 코드 포인트를 UTF-16으로 인코딩된 문자열로 변환합니다.

ConvertToUtf32(Char, Char)

UTF-16으로 인코딩된 서로게이트 쌍의 값을 유니코드 코드 포인트로 변환합니다.

ConvertToUtf32(String, Int32)

문자열의 지정한 위치에 있는 UTF-16으로 인코딩된 문자 또는 서로게이트 쌍의 값을 유니코드 코드 포인트로 변환합니다.

Equals(Char)

이 인스턴스가 지정된 Char 개체와 같은지 여부를 나타내는 값을 반환합니다.

Equals(Object)

이 인스턴스가 지정된 개체와 같은지를 나타내는 값을 반환합니다.

GetHashCode()

이 인스턴스의 해시 코드를 반환합니다.

GetNumericValue(Char)

숫자 형식의 유니코드 문자를 배정밀도 부동 소수점 숫자로 변환합니다.

GetNumericValue(String, Int32)

지정된 문자열의 지정된 위치에 있는 숫자 형식의 유니코드 문자를 배정밀도 부동 소수점 숫자로 변환합니다.

GetTypeCode()

TypeCode 값 형식에 대한 Char를 반환합니다.

GetUnicodeCategory(Char)

지정한 유니코드 문자를 UnicodeCategory 값 중 하나로 식별되는 그룹으로 분류합니다.

GetUnicodeCategory(String, Int32)

지정된 문자열의 지정된 위치에 있는 문자를 UnicodeCategory 값 중 하나로 식별되는 그룹으로 분류합니다.

IsAscii(Char)

true c 가 ASCII 문자 ([U + 0000 ..U + 007f 사이의]) 인 경우을 반환 합니다.

IsControl(Char)

지정된 유니코드 문자가 제어 문자인지 여부를 나타냅니다.

IsControl(String, Int32)

지정된 문자열의 지정된 위치에 있는 문자가 제어 문자인지 여부를 나타냅니다.

IsDigit(Char)

유니코드 문자가 10진수인지 여부를 나타냅니다.

IsDigit(String, Int32)

지정된 문자열의 지정된 위치에 있는 문자가 10진수인지 여부를 나타냅니다.

IsHighSurrogate(Char)

지정한 Char 개체가 high surrogate인지 여부를 나타냅니다.

IsHighSurrogate(String, Int32)

문자열의 지정한 위치에 있는 Char 개체가 high surrogate인지 여부를 나타냅니다.

IsLetter(Char)

지정된 유니코드 문자가 유니코드 글자인지 여부를 나타냅니다.

IsLetter(String, Int32)

지정된 문자열의 지정된 위치에 있는 문자가 유니코드 글자인지 여부를 나타냅니다.

IsLetterOrDigit(Char)

지정된 유니코드 문자가 글자나 10진수인지 여부를 나타냅니다.

IsLetterOrDigit(String, Int32)

지정된 문자열의 지정된 위치에 있는 문자가 글자나 10진수인지 여부를 나타냅니다.

IsLower(Char)

유니코드 문자가 소문자 자모인지 여부를 나타냅니다.

IsLower(String, Int32)

지정된 문자열의 지정된 위치에 있는 자모가 소문자인지 여부를 나타냅니다.

IsLowSurrogate(Char)

지정한 Char 개체가 low surrogate인지 여부를 나타냅니다.

IsLowSurrogate(String, Int32)

문자열의 지정한 위치에 있는 Char 개체가 low surrogate인지 여부를 나타냅니다.

IsNumber(Char)

지정된 유니코드 문자가 숫자인지 여부를 나타냅니다.

IsNumber(String, Int32)

지정된 문자열의 지정된 위치에 있는 문자가 숫자인지 여부를 나타냅니다.

IsPunctuation(Char)

유니코드 문자가 문장 부호인지 여부를 나타냅니다.

IsPunctuation(String, Int32)

지정된 문자열의 지정된 위치에 있는 문자가 문장 부호인지 여부를 나타냅니다.

IsSeparator(Char)

유니코드 문자가 구분 문자인지 여부를 나타냅니다.

IsSeparator(String, Int32)

지정된 문자열의 지정된 위치에 있는 문자가 구분 문자인지 여부를 나타냅니다.

IsSurrogate(Char)

지정된 문자에 서로게이트 코드 단위가 있는지 여부를 나타냅니다.

IsSurrogate(String, Int32)

지정된 문자열의 지정된 위치에 있는 문자에 서로게이트 코드 단위가 있는지 여부를 나타냅니다.

IsSurrogatePair(Char, Char)

지정한 두 개의 Char 개체가 서로게이트 쌍을 형성하는지 여부를 나타냅니다.

IsSurrogatePair(String, Int32)

문자열의 지정한 위치에 있는 두 개의 인접한 Char 개체가 서로게이트 쌍을 형성하는지 여부를 나타냅니다.

IsSymbol(Char)

유니코드 문자가 기호 문자인지 여부를 나타냅니다.

IsSymbol(String, Int32)

지정된 문자열의 지정된 위치에 있는 문자가 기호 문자인지 여부를 나타냅니다.

IsUpper(Char)

유니코드 자모가 대문자인지 여부를 나타냅니다.

IsUpper(String, Int32)

지정된 문자열의 지정된 위치에 있는 문자가 대문자 자모인지 여부를 나타냅니다.

IsWhiteSpace(Char)

유니코드 문자가 공백인지 여부를 나타냅니다.

IsWhiteSpace(String, Int32)

지정된 문자열의 지정된 위치에 있는 문자가 공백인지 여부를 나타냅니다.

Parse(String)

지정된 문자열의 값을 해당하는 유니코드 문자로 변환합니다.

ToLower(Char)

유니코드 문자를 해당하는 소문자로 변환합니다.

ToLower(Char, CultureInfo)

문화권별 형식 지정 정보를 사용하여 지정된 유니코드 문자의 값을 해당하는 소문자로 변환합니다.

ToLowerInvariant(Char)

고정 문화권의 대/소문자 규칙을 사용하여 유니코드 문자의 값을 해당하는 소문자로 변환합니다.

ToString()

이 인스턴스의 값을 해당하는 문자열 표현으로 변환합니다.

ToString(Char)

지정된 유니코드 문자를 해당하는 문자열 표현으로 변환합니다.

ToString(IFormatProvider)

지정된 문화권별 형식 정보를 사용하여 이 인스턴스의 값을 해당 문자열 표현으로 변환합니다.

ToUpper(Char)

유니코드 문자를 해당하는 대문자로 변환합니다.

ToUpper(Char, CultureInfo)

문화권별 형식 지정 정보를 사용하여 지정된 유니코드 문자의 값을 해당하는 대문자로 변환합니다.

ToUpperInvariant(Char)

고정 문화권의 대/소문자 규칙을 사용하여 유니코드 문자의 값을 해당하는 대문자로 변환합니다.

TryParse(String, Char)

지정된 문자열의 값을 해당하는 유니코드 문자로 변환합니다. 반환 코드는 변환이 성공했는지 아니면 실패했는지를 나타냅니다.

명시적 인터페이스 구현

IComparable.CompareTo(Object)

현재 인스턴스와 동일한 형식의 다른 개체를 비교하고 정렬 순서에서 현재 인스턴스의 위치가 다른 개체보다 앞인지, 뒤인지 또는 동일한지를 나타내는 정수를 반환합니다.

IConvertible.GetTypeCode()

이 인스턴스에 대한 TypeCode를 반환합니다.

IConvertible.ToBoolean(IFormatProvider)

참고 이 변환은 지원되지 않습니다. 그렇게 하면 InvalidCastException이 throw됩니다.

IConvertible.ToByte(IFormatProvider)

이 멤버에 대한 설명은 ToByte(IFormatProvider)를 참조하세요.

IConvertible.ToChar(IFormatProvider)

이 멤버에 대한 설명은 ToChar(IFormatProvider)를 참조하세요.

IConvertible.ToDateTime(IFormatProvider)

참고 이 변환은 지원되지 않습니다. 그렇게 하면 InvalidCastException이 throw됩니다.

IConvertible.ToDecimal(IFormatProvider)

참고 이 변환은 지원되지 않습니다. 그렇게 하면 InvalidCastException이 throw됩니다.

IConvertible.ToDouble(IFormatProvider)

참고 이 변환은 지원되지 않습니다. 그렇게 하면 InvalidCastException이 throw됩니다.

IConvertible.ToInt16(IFormatProvider)

이 멤버에 대한 설명은 ToInt16(IFormatProvider)를 참조하세요.

IConvertible.ToInt32(IFormatProvider)

이 멤버에 대한 설명은 ToInt32(IFormatProvider)를 참조하세요.

IConvertible.ToInt64(IFormatProvider)

이 멤버에 대한 설명은 ToInt64(IFormatProvider)를 참조하세요.

IConvertible.ToSByte(IFormatProvider)

이 멤버에 대한 설명은 ToSByte(IFormatProvider)를 참조하세요.

IConvertible.ToSingle(IFormatProvider)

참고 이 변환은 지원되지 않습니다. 그렇게 하면 InvalidCastException이 throw됩니다.

IConvertible.ToString(IFormatProvider)

지정된 문화권별 형식 지정 정보를 사용하여 이 인스턴스의 값을 해당하는 문자열로 변환합니다.

IConvertible.ToType(Type, IFormatProvider)

이 멤버에 대한 설명은 ToType(Type, IFormatProvider)를 참조하세요.

IConvertible.ToUInt16(IFormatProvider)

이 멤버에 대한 설명은 ToUInt16(IFormatProvider)를 참조하세요.

IConvertible.ToUInt32(IFormatProvider)

이 멤버에 대한 설명은 ToUInt32(IFormatProvider)를 참조하세요.

IConvertible.ToUInt64(IFormatProvider)

이 멤버에 대한 설명은 ToUInt64(IFormatProvider)를 참조하세요.

IFormattable.ToString(String, IFormatProvider)

지정된 형식을 사용하여 현재 인스턴스 값의 형식을 지정합니다.

ISpanFormattable.TryFormat(Span<Char>, Int32, ReadOnlySpan<Char>, IFormatProvider)

현재 인스턴스의 값 형식을 제공된 문자 범위로 지정하려고 시도합니다.

적용 대상

스레드 보안

이 형식의 모든 멤버는 스레드로부터 안전 합니다. 인스턴스 상태를 수정 하는 것 처럼 보이는 멤버는 실제로 새 값으로 초기화 된 새 인스턴스를 반환 합니다. 다른 형식과 마찬가지로이 형식의 인스턴스를 포함 하는 공유 변수에 대 한 읽기 및 쓰기는 스레드 안전을 보장 하기 위해 잠금으로 보호 되어야 합니다.

추가 정보