Encoding.BigEndianUnicode 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取使用大字节字节顺序的 UTF-16 格式的编码。
public:
static property System::Text::Encoding ^ BigEndianUnicode { System::Text::Encoding ^ get(); };
public static System.Text.Encoding BigEndianUnicode { get; }
static member BigEndianUnicode : System.Text.Encoding
Public Shared ReadOnly Property BigEndianUnicode As Encoding
属性值
UTF-16 格式的编码对象,该对象使用大字节字节顺序。
示例
以下示例使用大字节顺序读取 UTF-16 编码的文本文件。
using System;
using System.IO;
namespace BigEndianExample
{
public class Class1
{
public static void Main(string[] args)
{
// Read a text file saved with Big Endian Unicode encoding.
System.Text.Encoding encoding = System.Text.Encoding.BigEndianUnicode;
StreamReader reader = new StreamReader("TextFile.txt", encoding);
string line = reader.ReadLine();
while (line != null)
{
Console.WriteLine(line);
line = reader.ReadLine();
}
}
}
}
Imports System.IO
Namespace BigEndianExample
Public Class Class1
Public Overloads Shared Sub Main()
' Read a text file saved with Big Endian Unicode encoding.
Dim encoding As System.Text.Encoding = System.Text.Encoding.BigEndianUnicode
Dim reader As New StreamReader("TextFile.txt", encoding)
Dim line As String = reader.ReadLine()
While Not (line Is Nothing)
Console.WriteLine(line)
line = reader.ReadLine()
End While
End Sub
End Class
End Namespace
下面的示例确定对字符数组进行编码、对字符进行编码以及显示生成的字节所需的字节数。
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
注解
UnicodeEncoding此属性返回的对象可能没有适合你的应用的行为。 它使用替换回退来替换无法编码的每个字符串,以及无法使用问号(“?”)字符解码的每个字节。 相反,可以调用UnicodeEncoding.UnicodeEncoding(Boolean, Boolean, Boolean)构造函数来实例化回退为一个或一UnicodeEncoding个EncoderFallbackException的大 endian DecoderFallbackException 对象,如以下示例所示。
using System;
using System.Text;
public class Example
{
public static void Main()
{
byte[] bytes = { 0x00, 0x20, 0xd8, 0x01, 0x00, 0x68, 0xA7, 0x00 };
Encoding enc = new UnicodeEncoding(true, 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 0xD8 0x01 at index 4
Imports System.Text
Module Example
Public Sub Main()
Dim bytes() As Byte = { &h00, &h20, &hd8, &h01, &h00, &h68, &hA7, &h00}
Dim enc As Encoding = New UnicodeEncoding(True, 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 0xD8 0x01 at index 4
返回UnicodeEncoding的对象具有BodyName和HeaderNameWebName属性,可生成名称“unicodeFFFE”。 尽管 UTF-16 大字节字节顺序标记是十六进制 FEFF,但选择了名称“unicodeFFFE”,因为字节顺序标记在小 endian Windows 计算机上显示为十六进制 FFFE。