Encoding.Unicode Eigenschaft
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Ruft eine Codierung für das UTF-16-Format mithilfe der kleinen Endian Bytereihenfolge ab.
public:
static property System::Text::Encoding ^ Unicode { System::Text::Encoding ^ get(); };
public static System.Text.Encoding Unicode { get; }
static member Unicode : System.Text.Encoding
Public Shared ReadOnly Property Unicode As Encoding
Eigenschaftswert
Eine Codierung für das UTF-16-Format mit der Kleinen Endenbytereihenfolge.
Beispiele
Im folgenden Beispiel wird die Anzahl der Bytes bestimmt, die zum Codieren eines Zeichenarrays erforderlich sind, die Zeichen codiert und die resultierenden Bytes angezeigt.
using System;
using System.Text;
public class SamplesEncoding {
public static void Main() {
// The characters to encode:
// Latin Small Letter Z (U+007A)
// Latin Small Letter A (U+0061)
// Combining Breve (U+0306)
// Latin Small Letter AE With Acute (U+01FD)
// Greek Small Letter Beta (U+03B2)
// a high-surrogate value (U+D8FF)
// a low-surrogate value (U+DCFF)
char[] myChars = new char[] { 'z', 'a', '\u0306', '\u01FD', '\u03B2', '\uD8FF', '\uDCFF' };
// Get different encodings.
Encoding u7 = Encoding.UTF7;
Encoding u8 = Encoding.UTF8;
Encoding u16LE = Encoding.Unicode;
Encoding u16BE = Encoding.BigEndianUnicode;
Encoding u32 = Encoding.UTF32;
// Encode the entire array, and print out the counts and the resulting bytes.
PrintCountsAndBytes( myChars, u7 );
PrintCountsAndBytes( myChars, u8 );
PrintCountsAndBytes( myChars, u16LE );
PrintCountsAndBytes( myChars, u16BE );
PrintCountsAndBytes( myChars, u32 );
}
public static void PrintCountsAndBytes( char[] chars, Encoding enc ) {
// Display the name of the encoding used.
Console.Write( "{0,-30} :", enc.ToString() );
// Display the exact byte count.
int iBC = enc.GetByteCount( chars );
Console.Write( " {0,-3}", iBC );
// Display the maximum byte count.
int iMBC = enc.GetMaxByteCount( chars.Length );
Console.Write( " {0,-3} :", iMBC );
// Encode the array of chars.
byte[] bytes = enc.GetBytes( chars );
// Display all the encoded bytes.
PrintHexBytes( bytes );
}
public static void PrintHexBytes( byte[] bytes ) {
if (( bytes == null ) || ( bytes.Length == 0 ))
{
Console.WriteLine( "<none>" );
}
else {
for ( int i = 0; i < bytes.Length; i++ )
Console.Write( "{0:X2} ", bytes[i] );
Console.WriteLine();
}
}
}
/*
This code produces the following output.
System.Text.UTF7Encoding : 18 23 :7A 61 2B 41 77 59 42 2F 51 4F 79 32 50 2F 63 2F 77 2D
System.Text.UTF8Encoding : 12 24 :7A 61 CC 86 C7 BD CE B2 F1 8F B3 BF
System.Text.UnicodeEncoding : 14 16 :7A 00 61 00 06 03 FD 01 B2 03 FF D8 FF DC
System.Text.UnicodeEncoding : 14 16 :00 7A 00 61 03 06 01 FD 03 B2 D8 FF DC FF
System.Text.UTF32Encoding : 24 32 :7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00
*/
Imports System.Text
Public Class SamplesEncoding
Public Shared Sub Main()
' The characters to encode:
' Latin Small Letter Z (U+007A)
' Latin Small Letter A (U+0061)
' Combining Breve (U+0306)
' Latin Small Letter AE With Acute (U+01FD)
' Greek Small Letter Beta (U+03B2)
' a high-surrogate value (U+D8FF)
' a low-surrogate value (U+DCFF)
Dim myChars() As Char = {"z"c, "a"c, ChrW(&H0306), ChrW(&H01FD), ChrW(&H03B2), ChrW(&HD8FF), ChrW(&HDCFF)}
' Get different encodings.
Dim u7 As Encoding = Encoding.UTF7
Dim u8 As Encoding = Encoding.UTF8
Dim u16LE As Encoding = Encoding.Unicode
Dim u16BE As Encoding = Encoding.BigEndianUnicode
Dim u32 As Encoding = Encoding.UTF32
' Encode the entire array, and print out the counts and the resulting bytes.
PrintCountsAndBytes(myChars, u7)
PrintCountsAndBytes(myChars, u8)
PrintCountsAndBytes(myChars, u16LE)
PrintCountsAndBytes(myChars, u16BE)
PrintCountsAndBytes(myChars, u32)
End Sub
Public Shared Sub PrintCountsAndBytes(chars() As Char, enc As Encoding)
' Display the name of the encoding used.
Console.Write("{0,-30} :", enc.ToString())
' Display the exact byte count.
Dim iBC As Integer = enc.GetByteCount(chars)
Console.Write(" {0,-3}", iBC)
' Display the maximum byte count.
Dim iMBC As Integer = enc.GetMaxByteCount(chars.Length)
Console.Write(" {0,-3} :", iMBC)
' Encode the array of chars.
Dim bytes As Byte() = enc.GetBytes(chars)
' Display all the encoded bytes.
PrintHexBytes(bytes)
End Sub
Public Shared Sub PrintHexBytes(bytes() As Byte)
If bytes Is Nothing OrElse bytes.Length = 0 Then
Console.WriteLine("<none>")
Else
Dim i As Integer
For i = 0 To bytes.Length - 1
Console.Write("{0:X2} ", bytes(i))
Next i
Console.WriteLine()
End If
End Sub
End Class
'This code produces the following output.
'
'System.Text.UTF7Encoding : 18 23 :7A 61 2B 41 77 59 42 2F 51 4F 79 32 50 2F 63 2F 77 2D
'System.Text.UTF8Encoding : 12 24 :7A 61 CC 86 C7 BD CE B2 F1 8F B3 BF
'System.Text.UnicodeEncoding : 14 16 :7A 00 61 00 06 03 FD 01 B2 03 FF D8 FF DC
'System.Text.UnicodeEncoding : 14 16 :00 7A 00 61 03 06 01 FD 03 B2 D8 FF DC FF
'System.Text.UTF32Encoding : 24 32 :7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00
Hinweise
Informationen zu den Codierungen, die von .NET unterstützt werden, und eine Erläuterung dazu, welche Unicode-Codierung verwendet werden soll, finden Sie unter Character-Codierung in .NET.
Das UnicodeEncoding von dieser Eigenschaft zurückgegebene Objekt weist möglicherweise nicht das entsprechende Verhalten für Ihre App auf. Er verwendet Ersatzfallback, um jede Zeichenfolge zu ersetzen, die nicht codiert werden kann, und jedes Byte, das nicht mit einem Fragezeichen ("?") decodiert werden kann. Stattdessen können Sie den UnicodeEncoding.UnicodeEncoding(Boolean, Boolean, Boolean) Konstruktor aufrufen, um ein kleines Endian-Objekt UnicodeEncoding zu instanziieren, dessen Fallback entweder ein EncoderFallbackException oder ein DecoderFallbackExceptionist, wie das folgende Beispiel veranschaulicht.
using System;
using System.Text;
public class Example
{
public static void Main()
{
byte[] bytes = { 0x20, 0x00, 0x01, 0xD8, 0x68, 0x00, 0xA7, 0x00 };
Encoding enc = new UnicodeEncoding(false, true, true);
try {
string value = enc.GetString(bytes);
Console.WriteLine();
Console.WriteLine("'{0}'", value);
}
catch (DecoderFallbackException e) {
Console.WriteLine("Unable to decode {0} at index {1}",
ShowBytes(e.BytesUnknown), e.Index);
}
}
private static string ShowBytes(byte[] bytes)
{
string returnString = null;
foreach (var byteValue in bytes)
returnString += String.Format("0x{0:X2} ", byteValue);
return returnString.Trim();
}
}
// The example displays the following output:
// Unable to decode 0x01 0xD8 at index 4
Imports System.Text
Module Example
Public Sub Main()
Dim bytes() As Byte = { &h20, &h00, &h01, &hD8, &h68, &h00, &hA7, &h00}
Dim enc As Encoding = New UnicodeEncoding(False, True, True)
Try
Dim value As String = enc.GetString(bytes)
Console.WriteLine()
Console.WriteLine("'{0}'", value)
Catch e As DecoderFallbackException
Console.WriteLine("Unable to decode {0} at index {1}",
ShowBytes(e.BytesUnknown), e.Index)
End Try
End Sub
Private Function ShowBytes(bytes As Byte()) As String
Dim returnString As String = Nothing
For Each byteValue In bytes
returnString += String.Format("0x{0:X2} ", byteValue)
Next
Return returnString.Trim()
End Function
End Module
' The example displays the following output:
' Unable to decode 0x01 0xD8 at index 4