Char.ConvertFromUtf32(Int32) 方法

定義

將指定的 Unicode 字碼點轉換成 UTF-16 編碼字串。

public:
 static System::String ^ ConvertFromUtf32(int utf32);
public static string ConvertFromUtf32(int utf32);
static member ConvertFromUtf32 : int -> string
Public Shared Function ConvertFromUtf32 (utf32 As Integer) As String

參數

utf32
Int32

一個 21 位元的 Unicode 碼點。

傳回

一個由一個 Char 物件組成的字串,或一對 Char 等價於參數指定的 utf32 碼點的替代物件。

例外狀況

utf32 不是一個有效的 21 位元 Unicode 碼點,範圍從 U+0 到 U+10FFFF,排除從 U+D800 到 U+DFFF 的替代對。

範例

以下程式碼範例展示了 ConvertToUtf32 and ConvertFromUtf32 方法。

// This example demonstrates the Char.ConvertFromUtf32() method
//                           and Char.ConvertToUtf32() overloads.
using System;

class Sample
{
    public static void Main()
    {
    int letterA = 0x0041;  //U+00041 = LATIN CAPITAL LETTER A
    int music   = 0x1D161; //U+1D161 = MUSICAL SYMBOL SIXTEENTH NOTE
    string s1;
    string comment   = "Create a UTF-16 encoded string from a code point.";
    string comment1b = "Create a code point from a UTF-16 encoded string.";
    string comment2b = "Create a code point from a surrogate pair at a certain position in a string.";
    string comment2c = "Create a code point from a high surrogate and a low surrogate code point.";

//  Convert code point U+0041 to UTF-16. The UTF-16 equivalent of
//  U+0041 is a Char with hexadecimal value 0041.

    Console.WriteLine(comment);
    s1 = Char.ConvertFromUtf32(letterA);
    Console.Write("    1a) 0x{0:X} => ", letterA);
    Show(s1);
    Console.WriteLine();

//  Convert the lone UTF-16 character to a code point.

    Console.WriteLine(comment1b);
    letterA = Char.ConvertToUtf32(s1, 0);
    Console.Write("    1b) ");
    Show(s1);
    Console.WriteLine(" => 0x{0:X}", letterA);
    Console.WriteLine();

// -------------------------------------------------------------------

//  Convert the code point U+1D161 to UTF-16. The UTF-16 equivalent of
//  U+1D161 is a surrogate pair with hexadecimal values D834 and DD61.

    Console.WriteLine(comment);
    s1 = Char.ConvertFromUtf32(music);
    Console.Write("    2a) 0x{0:X} => ", music);
    Show(s1);
    Console.WriteLine();

//  Convert the surrogate pair in the string at index position
//  zero to a code point.

    Console.WriteLine(comment2b);
    music = Char.ConvertToUtf32(s1, 0);
    Console.Write("    2b) ");
    Show(s1);
    Console.WriteLine(" => 0x{0:X}", music);

//  Convert the high and low characters in the surrogate pair into a code point.

    Console.WriteLine(comment2c);
    music = Char.ConvertToUtf32(s1[0], s1[1]);
    Console.Write("    2c) ");
    Show(s1);
    Console.WriteLine(" => 0x{0:X}", music);
    }

    private static void Show(string s)
    {
    for (int x = 0; x < s.Length; x++)
        {
        Console.Write("0x{0:X}{1}",
                       (int)s[x],
                       ((x == s.Length-1)? String.Empty : ", "));
        }
    }
}
/*
This example produces the following results:

Create a UTF-16 encoded string from a code point.
    1a) 0x41 => 0x41
Create a code point from a UTF-16 encoded string.
    1b) 0x41 => 0x41

Create a UTF-16 encoded string from a code point.
    2a) 0x1D161 => 0xD834, 0xDD61
Create a code point from a surrogate pair at a certain position in a string.
    2b) 0xD834, 0xDD61 => 0x1D161
Create a code point from a high surrogate and a low surrogate code point.
    2c) 0xD834, 0xDD61 => 0x1D161

*/
open System

let show (s: string) =
    for x = 0 to s.Length - 1 do
        printf $"""0x{int s[x]:X}{if x = s.Length - 1 then String.Empty else ", "}"""                    

[<EntryPoint>]
let main _ =
    let letterA = 0x0041  //U+00041 = LATIN CAPITAL LETTER A
    let music   = 0x1D161 //U+1D161 = MUSICAL SYMBOL SIXTEENTH NOTE
    let comment   = "Create a UTF-16 encoded string from a code point."
    let comment1b = "Create a code point from a UTF-16 encoded string."
    let comment2b = "Create a code point from a surrogate pair at a certain position in a string."
    let comment2c = "Create a code point from a high surrogate and a low surrogate code point."

//  Convert code point U+0041 to UTF-16. The UTF-16 equivalent of
//  U+0041 is a Char with hexadecimal value 0041.

    printfn $"{comment}"
    let s1 = Char.ConvertFromUtf32 letterA
    printf $"    1a) 0x{letterA:X} => "
    show s1
    printfn ""

//  Convert the lone UTF-16 character to a code point.

    printfn $"{comment1b}"
    let letterA = Char.ConvertToUtf32(s1, 0)
    printf "    1b) "
    show s1
    printfn $" => 0x{letterA:X}"
    printfn ""

// -------------------------------------------------------------------

//  Convert the code point U+1D161 to UTF-16. The UTF-16 equivalent of
//  U+1D161 is a surrogate pair with hexadecimal values D834 and DD61.

    printfn $"{comment}"
    let s1 = Char.ConvertFromUtf32 music
    printf $"    2a) 0x{music:X} => "
    show s1
    printfn ""

//  Convert the surrogate pair in the string at index position
//  zero to a code point.

    printfn $"{comment2b}" 
    let music = Char.ConvertToUtf32(s1, 0)
    printf "    2b) "
    show s1
    printfn $" => 0x{music:X}"

//  Convert the high and low characters in the surrogate pair into a code point.

    printfn $"{comment2c}"
    let music = Char.ConvertToUtf32(s1[0], s1[1])
    printf "    2c) "
    show s1
    printfn $" => 0x{music:X}"

    0

// This example produces the following results:
//
// Create a UTF-16 encoded string from a code point.
//     1a) 0x41 => 0x41
// Create a code point from a UTF-16 encoded string.
//     1b) 0x41 => 0x41
//
// Create a UTF-16 encoded string from a code point.
//     2a) 0x1D161 => 0xD834, 0xDD61
// Create a code point from a surrogate pair at a certain position in a string.
//     2b) 0xD834, 0xDD61 => 0x1D161
// Create a code point from a high surrogate and a low surrogate code point.
//     2c) 0xD834, 0xDD61 => 0x1D161
Class Sample
   Public Shared Sub Main()
      Dim letterA As Integer = &H41    'U+00041 = LATIN CAPITAL LETTER A
      Dim music As Integer   = &H1D161 'U+1D161 = MUSICAL SYMBOL SIXTEENTH NOTE
      Dim s1 As String
      Dim comment   As String = "Create a UTF-16 encoded string from a code point."
      Dim comment1b As String = "Create a code point from a UTF-16 encoded string."
      Dim comment2b As String = "Create a code point from a surrogate pair at a certain position in a string."
      Dim comment2c As String = "Create a code point from a high surrogate and a low surrogate code point."
      
      '  Convert code point U+0041 to UTF-16. The UTF-16 equivalent of 
      '  U+0041 is a Char with hexadecimal value 0041.

      Console.WriteLine(comment)
      s1 = [Char].ConvertFromUtf32(letterA)
      Console.Write("    1a) 0x{0:X} => ", letterA)
      Show(s1)
      Console.WriteLine()
      
      '  Convert the lone UTF-16 character to a code point.

      Console.WriteLine(comment1b)
      letterA = [Char].ConvertToUtf32(s1, 0)
      Console.Write("    1b) ")
      Show(s1)
      Console.WriteLine(" => 0x{0:X}", letterA)
      Console.WriteLine()
      
      ' -------------------------------------------------------------------

      '  Convert the code point U+1D161 to UTF-16. The UTF-16 equivalent of 
      '  U+1D161 is a surrogate pair with hexadecimal values D834 and DD61.

      Console.WriteLine(comment)
      s1 = [Char].ConvertFromUtf32(music)
      Console.Write("    2a) 0x{0:X} => ", music)
      Show(s1)
      Console.WriteLine()
      
      '  Convert the surrogate pair in the string at index position 
      '  zero to a code point.

      Console.WriteLine(comment2b)
      music = [Char].ConvertToUtf32(s1, 0)
      Console.Write("    2b) ")
      Show(s1)
      Console.WriteLine(" => 0x{0:X}", music)
      
      '  Convert the high and low characters in the surrogate pair into a code point.

      Console.WriteLine(comment2c)
      music = [Char].ConvertToUtf32(s1.Chars(0), s1.Chars(1))
      Console.Write("    2c) ")
      Show(s1)
      Console.WriteLine(" => 0x{0:X}", music)
   End Sub
   
   Private Shared Sub Show(s As String)
      Dim x As Integer
      If s.Length = 0 Then Exit Sub
      For x = 0 To s.Length - 1
         Console.Write("0x{0:X}{1}", _
                        AscW(s.Chars(x)), _
                        IIf(x = s.Length - 1, [String].Empty, ", "))
      Next 
   End Sub 
End Class 
'
'This example produces the following results:
'
'Create a UTF-16 encoded string from a code point.
'    1a) 0x41 => 0x41
'Create a code point from a UTF-16 encoded string.
'    1b) 0x41 => 0x41
'
'Create a UTF-16 encoded string from a code point.
'    2a) 0x1D161 => 0xD834, 0xDD61
'Create a code point from a surrogate pair at a certain position in a string.
'    2b) 0xD834, 0xDD61 => 0x1D161
'Create a code point from a high surrogate and a low surrogate code point.
'    2c) 0xD834, 0xDD61 => 0x1D161
'

備註

使用此方法將 21 位元 Unicode 碼點轉換成 UTF-16 編碼的字串,然後再用 和 IsLowSurrogate(Char)等方法IsHighSurrogate(Char)測試該字串。

在基本多語言平面(BMP)之外的有效碼點,總是會產生有效的替代節點。 然而,BMP 內有效的碼點可能無法依 Unicode 標準產生有效結果,因為轉換過程中未使用語言處理。 因此,請使用類別 System.Text.UTF32Encoding 將大量 UTF-32 資料轉換成大量 UTF-16 資料。

適用於

另請參閱