Encoding.GetByteCount Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
En cas de substitution dans une classe dérivée, calcule le nombre d’octets produits par l’encodage d’un jeu de caractères.
Surcharges
| Nom | Description |
|---|---|
| GetByteCount(String, Int32, Int32) |
En cas de substitution dans une classe dérivée, calcule le nombre d’octets produits par l’encodage d’un jeu de caractères à partir de la chaîne spécifiée. |
| GetByteCount(Char[], Int32, Int32) |
En cas de substitution dans une classe dérivée, calcule le nombre d’octets produits par l’encodage d’un jeu de caractères à partir du tableau de caractères spécifié. |
| GetByteCount(Char*, Int32) |
En cas de substitution dans une classe dérivée, calcule le nombre d’octets produits par l’encodage d’un jeu de caractères commençant par le pointeur de caractères spécifié. |
| GetByteCount(String) |
En cas de substitution dans une classe dérivée, calcule le nombre d’octets produits par l’encodage des caractères dans la chaîne spécifiée. |
| GetByteCount(ReadOnlySpan<Char>) |
En cas de substitution dans une classe dérivée, calcule le nombre d’octets produits par l’encodage des caractères dans l’étendue de caractères spécifiée. |
| GetByteCount(Char[]) |
En cas de substitution dans une classe dérivée, calcule le nombre d’octets produits par l’encodage de tous les caractères du tableau de caractères spécifié. |
GetByteCount(String, Int32, Int32)
En cas de substitution dans une classe dérivée, calcule le nombre d’octets produits par l’encodage d’un jeu de caractères à partir de la chaîne spécifiée.
public:
int GetByteCount(System::String ^ s, int index, int count);
public int GetByteCount(string s, int index, int count);
member this.GetByteCount : string * int * int -> int
Public Function GetByteCount (s As String, index As Integer, count As Integer) As Integer
Paramètres
- s
- String
Chaîne contenant le jeu de caractères à encoder.
- index
- Int32
Index du premier caractère à encoder.
- count
- Int32
Nombre de caractères à encoder.
Retours
Nombre d’octets produits par encodage de la chaîne.
Exemples
L’exemple suivant détermine le nombre d’octets requis pour encoder trois caractères à partir d’un tableau de caractères, encode les caractères et affiche les octets résultants.
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 three characters starting at index 4, and print out the counts and the resulting bytes.
PrintCountsAndBytes( myChars, 4, 3, u7 );
PrintCountsAndBytes( myChars, 4, 3, u8 );
PrintCountsAndBytes( myChars, 4, 3, u16LE );
PrintCountsAndBytes( myChars, 4, 3, u16BE );
PrintCountsAndBytes( myChars, 4, 3, u32 );
}
public static void PrintCountsAndBytes( char[] chars, int index, int count, 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, index, count );
Console.Write( " {0,-3}", iBC );
// Display the maximum byte count.
int iMBC = enc.GetMaxByteCount( count );
Console.Write( " {0,-3} :", iMBC );
// Encode the array of chars.
byte[] bytes = enc.GetBytes( chars, index, count );
// The following is an alternative way to encode the array of chars:
// byte[] bytes = new byte[iBC];
// enc.GetBytes( chars, index, count, bytes, bytes.GetLowerBound(0) );
// 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 : 10 11 :2B 41 37 4C 59 2F 39 7A 2F 2D
System.Text.UTF8Encoding : 6 12 :CE B2 F1 8F B3 BF
System.Text.UnicodeEncoding : 6 8 :B2 03 FF D8 FF DC
System.Text.UnicodeEncoding : 6 8 :03 B2 D8 FF DC FF
System.Text.UTF32Encoding : 8 16 :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 three characters starting at index 4, and print out the counts and the resulting bytes.
PrintCountsAndBytes(myChars, 4, 3, u7)
PrintCountsAndBytes(myChars, 4, 3, u8)
PrintCountsAndBytes(myChars, 4, 3, u16LE)
PrintCountsAndBytes(myChars, 4, 3, u16BE)
PrintCountsAndBytes(myChars, 4, 3, u32)
End Sub
Public Shared Sub PrintCountsAndBytes(chars() As Char, index As Integer, count As Integer, 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, index, count)
Console.Write(" {0,-3}", iBC)
' Display the maximum byte count.
Dim iMBC As Integer = enc.GetMaxByteCount(count)
Console.Write(" {0,-3} :", iMBC)
' Encode the array of chars.
Dim bytes As Byte() = enc.GetBytes(chars, index, count)
' The following is an alternative way to encode the array of chars:
' NOTE: In VB.NET, arrays contain one extra element by default.
' The following line creates the array with the exact number of elements required.
' Dim bytes(iBC - 1) As Byte
' enc.GetBytes( chars, index, count, bytes, bytes.GetLowerBound(0) )
' 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 : 10 11 :2B 41 37 4C 59 2F 39 7A 2F 2D
'System.Text.UTF8Encoding : 6 12 :CE B2 F1 8F B3 BF
'System.Text.UnicodeEncoding : 6 8 :B2 03 FF D8 FF DC
'System.Text.UnicodeEncoding : 6 8 :03 B2 D8 FF DC FF
'System.Text.UTF32Encoding : 8 16 :B2 03 00 00 FF FC 04 00
Remarques
Pour calculer la taille exacte du tableau requise pour GetBytes stocker les octets résultants, appelez la GetByteCount méthode. Pour calculer la taille maximale du tableau, appelez la GetMaxByteCount méthode. La GetByteCount méthode autorise généralement l’allocation de moins de mémoire, tandis que la GetMaxByteCount méthode s’exécute généralement plus rapidement.
La GetByteCount méthode détermine le nombre d’octets résultant de l’encodage d’un jeu de caractères Unicode, et la GetBytes méthode effectue l’encodage réel. La GetBytes méthode attend des conversions discrètes, contrairement à la Encoder.GetBytes méthode, qui gère plusieurs conversions sur un seul flux d’entrée.
Plusieurs versions et GetByteCountGetBytes sont prises en charge. Voici quelques considérations de programmation à prendre en compte pour l’utilisation de ces méthodes :
Votre application peut avoir besoin d’encoder de nombreux caractères d’entrée dans une page de codes et de traiter les caractères à l’aide de plusieurs appels. Dans ce cas, vous devez probablement conserver l’état entre les appels, en tenant compte de l’état persistant par l’objet Encoder utilisé.
Si votre application gère les entrées de chaîne, la version de chaîne est GetBytes recommandée.
La version de la mémoire tampon de caractères Unicode permet GetBytes(Char*, Int32, Byte*, Int32) certaines techniques rapides, en particulier avec plusieurs appels à l’aide de l’objet ou de l’insertion Encoder dans des mémoires tampons existantes. N’oubliez pas toutefois que cette version de méthode est parfois dangereuse, car les pointeurs sont requis.
Si votre application doit convertir une grande quantité de données, elle doit réutiliser la mémoire tampon de sortie. Dans ce cas, la GetBytes version qui prend en charge les tableaux d’octets est le meilleur choix.
Envisagez d’utiliser la Encoder.Convert méthode au lieu de GetByteCount. La méthode de conversion convertit autant de données que possible et lève une exception si la mémoire tampon de sortie est trop petite. Pour l’encodage continu d’un flux, cette méthode est souvent le meilleur choix.
S’applique à
GetByteCount(Char[], Int32, Int32)
En cas de substitution dans une classe dérivée, calcule le nombre d’octets produits par l’encodage d’un jeu de caractères à partir du tableau de caractères spécifié.
public:
abstract int GetByteCount(cli::array <char> ^ chars, int index, int count);
public abstract int GetByteCount(char[] chars, int index, int count);
abstract member GetByteCount : char[] * int * int -> int
Public MustOverride Function GetByteCount (chars As Char(), index As Integer, count As Integer) As Integer
Paramètres
- chars
- Char[]
Tableau de caractères contenant le jeu de caractères à encoder.
- index
- Int32
Index du premier caractère à encoder.
- count
- Int32
Nombre de caractères à encoder.
Retours
Nombre d’octets produits par encodage des caractères spécifiés.
Exceptions
chars a la valeur null.
index ou count est inférieur à zéro.
-ou-
index et count ne désignent pas une plage valide en chars.
Un secours s’est produit (pour plus d’informations, consultez Encodage de caractères dans .NET)
-et-
EncoderFallback a la valeur EncoderExceptionFallback.
Exemples
L’exemple suivant détermine le nombre d’octets requis pour encoder trois caractères à partir d’un tableau de caractères, encode les caractères et affiche les octets résultants.
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 three characters starting at index 4, and print out the counts and the resulting bytes.
PrintCountsAndBytes( myChars, 4, 3, u7 );
PrintCountsAndBytes( myChars, 4, 3, u8 );
PrintCountsAndBytes( myChars, 4, 3, u16LE );
PrintCountsAndBytes( myChars, 4, 3, u16BE );
PrintCountsAndBytes( myChars, 4, 3, u32 );
}
public static void PrintCountsAndBytes( char[] chars, int index, int count, 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, index, count );
Console.Write( " {0,-3}", iBC );
// Display the maximum byte count.
int iMBC = enc.GetMaxByteCount( count );
Console.Write( " {0,-3} :", iMBC );
// Encode the array of chars.
byte[] bytes = enc.GetBytes( chars, index, count );
// The following is an alternative way to encode the array of chars:
// byte[] bytes = new byte[iBC];
// enc.GetBytes( chars, index, count, bytes, bytes.GetLowerBound(0) );
// 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 : 10 11 :2B 41 37 4C 59 2F 39 7A 2F 2D
System.Text.UTF8Encoding : 6 12 :CE B2 F1 8F B3 BF
System.Text.UnicodeEncoding : 6 8 :B2 03 FF D8 FF DC
System.Text.UnicodeEncoding : 6 8 :03 B2 D8 FF DC FF
System.Text.UTF32Encoding : 8 16 :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 three characters starting at index 4, and print out the counts and the resulting bytes.
PrintCountsAndBytes(myChars, 4, 3, u7)
PrintCountsAndBytes(myChars, 4, 3, u8)
PrintCountsAndBytes(myChars, 4, 3, u16LE)
PrintCountsAndBytes(myChars, 4, 3, u16BE)
PrintCountsAndBytes(myChars, 4, 3, u32)
End Sub
Public Shared Sub PrintCountsAndBytes(chars() As Char, index As Integer, count As Integer, 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, index, count)
Console.Write(" {0,-3}", iBC)
' Display the maximum byte count.
Dim iMBC As Integer = enc.GetMaxByteCount(count)
Console.Write(" {0,-3} :", iMBC)
' Encode the array of chars.
Dim bytes As Byte() = enc.GetBytes(chars, index, count)
' The following is an alternative way to encode the array of chars:
' NOTE: In VB.NET, arrays contain one extra element by default.
' The following line creates the array with the exact number of elements required.
' Dim bytes(iBC - 1) As Byte
' enc.GetBytes( chars, index, count, bytes, bytes.GetLowerBound(0) )
' 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 : 10 11 :2B 41 37 4C 59 2F 39 7A 2F 2D
'System.Text.UTF8Encoding : 6 12 :CE B2 F1 8F B3 BF
'System.Text.UnicodeEncoding : 6 8 :B2 03 FF D8 FF DC
'System.Text.UnicodeEncoding : 6 8 :03 B2 D8 FF DC FF
'System.Text.UTF32Encoding : 8 16 :B2 03 00 00 FF FC 04 00
Remarques
Pour calculer la taille exacte du tableau requise pour GetBytes stocker les octets résultants, appelez la GetByteCount méthode. Pour calculer la taille maximale du tableau, appelez la GetMaxByteCount méthode. La GetByteCount méthode autorise généralement l’allocation de moins de mémoire, tandis que la GetMaxByteCount méthode s’exécute généralement plus rapidement.
La GetByteCount méthode détermine le nombre d’octets résultant de l’encodage d’un jeu de caractères Unicode, et la GetBytes méthode effectue l’encodage réel. La GetBytes méthode attend des conversions discrètes, contrairement à la Encoder.GetBytes méthode, qui gère plusieurs conversions sur un seul flux d’entrée.
Plusieurs versions et GetByteCountGetBytes sont prises en charge. Voici quelques considérations de programmation à prendre en compte pour l’utilisation de ces méthodes :
Votre application peut avoir besoin d’encoder de nombreux caractères d’entrée dans une page de codes et de traiter les caractères à l’aide de plusieurs appels. Dans ce cas, vous devez probablement conserver l’état entre les appels, en tenant compte de l’état persistant par l’objet Encoder utilisé.
Si votre application gère les entrées de chaîne, la version de chaîne est GetBytes recommandée.
La version de la mémoire tampon de caractères Unicode permet GetBytes(Char*, Int32, Byte*, Int32) certaines techniques rapides, en particulier avec plusieurs appels à l’aide de l’objet ou de l’insertion Encoder dans des mémoires tampons existantes. N’oubliez pas toutefois que cette version de méthode est parfois dangereuse, car les pointeurs sont requis.
Si votre application doit convertir une grande quantité de données, elle doit réutiliser la mémoire tampon de sortie. Dans ce cas, la GetBytes version qui prend en charge les tableaux d’octets est le meilleur choix.
Envisagez d’utiliser la Encoder.Convert méthode au lieu de GetByteCount. La méthode de conversion convertit autant de données que possible et lève une exception si la mémoire tampon de sortie est trop petite. Pour l’encodage continu d’un flux, cette méthode est souvent le meilleur choix.
Voir aussi
S’applique à
GetByteCount(Char*, Int32)
Important
Cette API n’est pas conforme CLS.
En cas de substitution dans une classe dérivée, calcule le nombre d’octets produits par l’encodage d’un jeu de caractères commençant par le pointeur de caractères spécifié.
public:
virtual int GetByteCount(char* chars, int count);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
public virtual int GetByteCount(char* chars, int count);
[System.CLSCompliant(false)]
[System.Runtime.InteropServices.ComVisible(false)]
public virtual int GetByteCount(char* chars, int count);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
[System.Runtime.InteropServices.ComVisible(false)]
public virtual int GetByteCount(char* chars, int count);
[System.CLSCompliant(false)]
public virtual int GetByteCount(char* chars, int count);
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
abstract member GetByteCount : nativeptr<char> * int -> int
override this.GetByteCount : nativeptr<char> * int -> int
[<System.CLSCompliant(false)>]
[<System.Runtime.InteropServices.ComVisible(false)>]
abstract member GetByteCount : nativeptr<char> * int -> int
override this.GetByteCount : nativeptr<char> * int -> int
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
[<System.Runtime.InteropServices.ComVisible(false)>]
abstract member GetByteCount : nativeptr<char> * int -> int
override this.GetByteCount : nativeptr<char> * int -> int
[<System.CLSCompliant(false)>]
abstract member GetByteCount : nativeptr<char> * int -> int
override this.GetByteCount : nativeptr<char> * int -> int
Paramètres
- chars
- Char*
Pointeur vers le premier caractère à encoder.
- count
- Int32
Nombre de caractères à encoder.
Retours
Nombre d’octets produits par encodage des caractères spécifiés.
- Attributs
Exceptions
chars a la valeur null.
count est inférieur à zéro.
Un secours s’est produit (pour plus d’informations, consultez Encodage de caractères dans .NET)
-et-
EncoderFallback a la valeur EncoderExceptionFallback.
Remarques
Pour calculer la taille exacte du tableau qui GetBytes nécessite de stocker les octets résultants, vous devez appeler la GetByteCount méthode. Pour calculer la taille maximale du tableau, appelez la GetMaxByteCount méthode. La GetByteCount méthode autorise généralement l’allocation de moins de mémoire, tandis que la GetMaxByteCount méthode s’exécute généralement plus rapidement.
La GetByteCount(Char*, Int32) méthode détermine le nombre d’octets résultant de l’encodage d’un jeu de caractères Unicode, et la GetBytes(Char*, Int32, Byte*, Int32) méthode effectue l’encodage réel. La GetBytes méthode attend des conversions discrètes, contrairement à la Encoder.GetBytes méthode, qui gère plusieurs conversions sur un seul flux d’entrée.
Plusieurs versions et GetByteCountGetBytes sont prises en charge. Voici quelques considérations relatives à l’utilisation de ces méthodes :
Votre application peut avoir besoin d’encoder de nombreux caractères d’entrée dans une page de codes et de traiter les caractères à l’aide de plusieurs appels. Dans ce cas, vous devez probablement conserver l’état entre les appels, en tenant compte de l’état persistant par l’objet Encoder utilisé.
Si votre application gère les entrées de chaîne, vous devez utiliser la version de chaîne de la GetBytes méthode.
La version de la mémoire tampon de caractères Unicode permet GetBytes certaines techniques rapides, en particulier avec plusieurs appels à l’aide de l’objet ou de l’insertion Encoder dans des mémoires tampons existantes. N’oubliez pas toutefois que cette version de méthode est parfois dangereuse, car les pointeurs sont requis.
Si votre application doit convertir une grande quantité de données, elle doit réutiliser la mémoire tampon de sortie. Dans ce cas, la GetBytes version qui prend en charge les tableaux d’octets est le meilleur choix.
Envisagez d’utiliser la Encoder.Convert méthode au lieu de GetByteCount. La méthode de conversion convertit autant de données que possible et lève une exception si la mémoire tampon de sortie est trop petite. Pour l’encodage continu d’un flux, cette méthode est souvent le meilleur choix.
Voir aussi
S’applique à
GetByteCount(String)
En cas de substitution dans une classe dérivée, calcule le nombre d’octets produits par l’encodage des caractères dans la chaîne spécifiée.
public:
virtual int GetByteCount(System::String ^ s);
public virtual int GetByteCount(string s);
abstract member GetByteCount : string -> int
override this.GetByteCount : string -> int
Public Overridable Function GetByteCount (s As String) As Integer
Paramètres
- s
- String
Chaîne contenant le jeu de caractères à encoder.
Retours
Nombre d’octets produits par encodage des caractères spécifiés.
Exceptions
s a la valeur null.
Un secours s’est produit (pour plus d’informations, consultez Encodage de caractères dans .NET)
-et-
EncoderFallback a la valeur EncoderExceptionFallback.
Exemples
L’exemple suivant détermine le nombre d’octets requis pour encoder une chaîne ou une plage dans la chaîne, encode les caractères et affiche les octets résultants.
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)
String myStr = "za\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 string, and print out the counts and the resulting bytes.
Console.WriteLine( "Encoding the entire string:" );
PrintCountsAndBytes( myStr, u7 );
PrintCountsAndBytes( myStr, u8 );
PrintCountsAndBytes( myStr, u16LE );
PrintCountsAndBytes( myStr, u16BE );
PrintCountsAndBytes( myStr, u32 );
Console.WriteLine();
// Encode three characters starting at index 4, and print out the counts and the resulting bytes.
Console.WriteLine( "Encoding the characters from index 4 through 6:" );
PrintCountsAndBytes( myStr, 4, 3, u7 );
PrintCountsAndBytes( myStr, 4, 3, u8 );
PrintCountsAndBytes( myStr, 4, 3, u16LE );
PrintCountsAndBytes( myStr, 4, 3, u16BE );
PrintCountsAndBytes( myStr, 4, 3, u32 );
}
public static void PrintCountsAndBytes( String s, Encoding enc ) {
// Display the name of the encoding used.
Console.Write( "{0,-30} :", enc.ToString() );
// Display the exact byte count.
int iBC = enc.GetByteCount( s );
Console.Write( " {0,-3}", iBC );
// Display the maximum byte count.
int iMBC = enc.GetMaxByteCount( s.Length );
Console.Write( " {0,-3} :", iMBC );
// Encode the entire string.
byte[] bytes = enc.GetBytes( s );
// Display all the encoded bytes.
PrintHexBytes( bytes );
}
public static void PrintCountsAndBytes( String s, int index, int count, Encoding enc ) {
// Display the name of the encoding used.
Console.Write( "{0,-30} :", enc.ToString() );
// Display the exact byte count.
int iBC = enc.GetByteCount( s.ToCharArray(), index, count );
Console.Write( " {0,-3}", iBC );
// Display the maximum byte count.
int iMBC = enc.GetMaxByteCount( count );
Console.Write( " {0,-3} :", iMBC );
// Encode a range of characters in the string.
byte[] bytes = new byte[iBC];
enc.GetBytes( s, index, count, bytes, bytes.GetLowerBound(0) );
// 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.
Encoding the entire string:
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
Encoding the characters from index 4 through 6:
System.Text.UTF7Encoding : 10 11 :2B 41 37 4C 59 2F 39 7A 2F 2D
System.Text.UTF8Encoding : 6 12 :CE B2 F1 8F B3 BF
System.Text.UnicodeEncoding : 6 8 :B2 03 FF D8 FF DC
System.Text.UnicodeEncoding : 6 8 :03 B2 D8 FF DC FF
System.Text.UTF32Encoding : 8 16 :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 myStr As String = "za" & 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 string, and print out the counts and the resulting bytes.
Console.WriteLine("Encoding the entire string:")
PrintCountsAndBytes(myStr, u7)
PrintCountsAndBytes(myStr, u8)
PrintCountsAndBytes(myStr, u16LE)
PrintCountsAndBytes(myStr, u16BE)
PrintCountsAndBytes(myStr, u32)
Console.WriteLine()
' Encode three characters starting at index 4, and print out the counts and the resulting bytes.
Console.WriteLine("Encoding the characters from index 4 through 6:")
PrintCountsAndBytes(myStr, 4, 3, u7)
PrintCountsAndBytes(myStr, 4, 3, u8)
PrintCountsAndBytes(myStr, 4, 3, u16LE)
PrintCountsAndBytes(myStr, 4, 3, u16BE)
PrintCountsAndBytes(myStr, 4, 3, u32)
End Sub
Overloads Public Shared Sub PrintCountsAndBytes(s As String, 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(s)
Console.Write(" {0,-3}", iBC)
' Display the maximum byte count.
Dim iMBC As Integer = enc.GetMaxByteCount(s.Length)
Console.Write(" {0,-3} :", iMBC)
' Encode the entire string.
Dim bytes As Byte() = enc.GetBytes(s)
' Display all the encoded bytes.
PrintHexBytes(bytes)
End Sub
Overloads Public Shared Sub PrintCountsAndBytes(s As String, index As Integer, count As Integer, 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(s.ToCharArray(), index, count)
Console.Write(" {0,-3}", iBC)
' Display the maximum byte count.
Dim iMBC As Integer = enc.GetMaxByteCount(count)
Console.Write(" {0,-3} :", iMBC)
' Encode a range of characters in the string.
' NOTE: In VB.NET, arrays contain one extra element by default.
' The following line creates the array with the exact number of elements required.
Dim bytes(iBC - 1) As Byte
enc.GetBytes(s, index, count, bytes, bytes.GetLowerBound(0))
' 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.
'
'Encoding the entire string:
'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
'
'Encoding the characters from index 4 through 6:
'System.Text.UTF7Encoding : 10 11 :2B 41 37 4C 59 2F 39 7A 2F 2D
'System.Text.UTF8Encoding : 6 12 :CE B2 F1 8F B3 BF
'System.Text.UnicodeEncoding : 6 8 :B2 03 FF D8 FF DC
'System.Text.UnicodeEncoding : 6 8 :03 B2 D8 FF DC FF
'System.Text.UTF32Encoding : 8 16 :B2 03 00 00 FF FC 04 00
Remarques
Pour calculer la taille exacte du tableau requise pour GetBytes stocker les octets résultants, appelez la GetByteCount méthode. Pour calculer la taille maximale du tableau, appelez la GetMaxByteCount méthode. La GetByteCount méthode autorise généralement l’allocation de moins de mémoire, tandis que la GetMaxByteCount méthode s’exécute généralement plus rapidement.
La GetByteCount méthode détermine le nombre d’octets résultant de l’encodage d’un jeu de caractères Unicode, et la GetBytes méthode effectue l’encodage réel. La GetBytes méthode attend des conversions discrètes, contrairement à la Encoder.GetBytes méthode, qui gère plusieurs conversions sur un seul flux d’entrée.
Plusieurs versions et GetByteCountGetBytes sont prises en charge. Voici quelques considérations de programmation à prendre en compte pour l’utilisation de ces méthodes :
Votre application peut avoir besoin d’encoder de nombreux caractères d’entrée dans une page de codes et de traiter les caractères à l’aide de plusieurs appels. Dans ce cas, vous devez probablement conserver l’état entre les appels, en tenant compte de l’état persistant par l’objet Encoder utilisé.
Si votre application gère les entrées de chaîne, la version de chaîne est GetBytes recommandée.
La version de la mémoire tampon de caractères Unicode permet GetBytes(Char*, Int32, Byte*, Int32) certaines techniques rapides, en particulier avec plusieurs appels à l’aide de l’objet ou de l’insertion Encoder dans des mémoires tampons existantes. N’oubliez pas toutefois que cette version de méthode est parfois dangereuse, car les pointeurs sont requis.
Si votre application doit convertir une grande quantité de données, elle doit réutiliser la mémoire tampon de sortie. Dans ce cas, la GetBytes version qui prend en charge les tableaux d’octets est le meilleur choix.
Envisagez d’utiliser la Encoder.Convert méthode au lieu de GetByteCount. La méthode de conversion convertit autant de données que possible et lève une exception si la mémoire tampon de sortie est trop petite. Pour l’encodage continu d’un flux, cette méthode est souvent le meilleur choix.
Voir aussi
S’applique à
GetByteCount(ReadOnlySpan<Char>)
En cas de substitution dans une classe dérivée, calcule le nombre d’octets produits par l’encodage des caractères dans l’étendue de caractères spécifiée.
public:
virtual int GetByteCount(ReadOnlySpan<char> chars);
public virtual int GetByteCount(ReadOnlySpan<char> chars);
abstract member GetByteCount : ReadOnlySpan<char> -> int
override this.GetByteCount : ReadOnlySpan<char> -> int
Public Overridable Function GetByteCount (chars As ReadOnlySpan(Of Char)) As Integer
Paramètres
- chars
- ReadOnlySpan<Char>
Étendue de caractères à encoder.
Retours
Nombre d’octets produits par encodage de l’étendue de caractères spécifiée.
Remarques
Pour calculer la taille exacte de l’étendue requise pour GetBytes stocker les octets résultants, appelez la GetByteCount méthode. Pour calculer la taille maximale de l’étendue, appelez la GetMaxByteCount méthode. La GetByteCount méthode autorise généralement l’allocation de moins de mémoire, tandis que la GetMaxByteCount méthode s’exécute généralement plus rapidement.
La GetByteCount méthode détermine le nombre d’octets résultant de l’encodage d’un jeu de caractères Unicode, et la GetBytes méthode effectue l’encodage réel. La GetBytes méthode attend des conversions discrètes, contrairement à la Encoder.GetBytes méthode, qui gère plusieurs conversions sur un seul flux d’entrée.
Plusieurs versions et GetByteCountGetBytes sont prises en charge. Voici quelques considérations de programmation à prendre en compte pour l’utilisation de ces méthodes :
Votre application peut avoir besoin d’encoder de nombreux caractères d’entrée dans une page de codes et de traiter les caractères à l’aide de plusieurs appels. Dans ce cas, vous devez probablement conserver l’état entre les appels, en tenant compte de l’état persistant par l’objet Encoder utilisé.
Si votre application gère l’étendue des entrées de caractères, la version d’étendue est GetBytes recommandée.
Envisagez d’utiliser la Encoder.Convert méthode au lieu de GetByteCount. La méthode de conversion convertit autant de données que possible et lève une exception si la mémoire tampon d’étendue de sortie est trop petite. Pour l’encodage continu d’un flux, cette méthode est souvent le meilleur choix.
S’applique à
GetByteCount(Char[])
En cas de substitution dans une classe dérivée, calcule le nombre d’octets produits par l’encodage de tous les caractères du tableau de caractères spécifié.
public:
virtual int GetByteCount(cli::array <char> ^ chars);
public virtual int GetByteCount(char[] chars);
abstract member GetByteCount : char[] -> int
override this.GetByteCount : char[] -> int
Public Overridable Function GetByteCount (chars As Char()) As Integer
Paramètres
- chars
- Char[]
Tableau de caractères contenant les caractères à encoder.
Retours
Nombre d’octets générés par encodage de tous les caractères dans le tableau de caractères spécifié.
Exceptions
chars a la valeur null.
Un secours s’est produit (pour plus d’informations, consultez Encodage de caractères dans .NET)
-et-
EncoderFallback a la valeur EncoderExceptionFallback.
Exemples
L’exemple suivant détermine le nombre d’octets requis pour encoder un tableau de caractères, encode les caractères et affiche les octets résultants.
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
Remarques
Pour calculer la taille exacte du tableau requise pour GetBytes stocker les octets résultants, appelez la GetByteCount méthode. Pour calculer la taille maximale du tableau, appelez la GetMaxByteCount méthode. La GetByteCount méthode autorise généralement l’allocation de moins de mémoire, tandis que la GetMaxByteCount méthode s’exécute généralement plus rapidement.
La GetByteCount méthode détermine le nombre d’octets résultant de l’encodage d’un jeu de caractères Unicode, et la GetBytes méthode effectue l’encodage réel. La GetBytes méthode attend des conversions discrètes, contrairement à la Encoder.GetBytes méthode, qui gère plusieurs conversions sur un seul flux d’entrée.
Plusieurs versions et GetByteCountGetBytes sont prises en charge. Voici quelques considérations de programmation à prendre en compte pour l’utilisation de ces méthodes :
Votre application peut avoir besoin d’encoder de nombreux caractères d’entrée dans une page de codes et de traiter les caractères à l’aide de plusieurs appels. Dans ce cas, vous devez probablement conserver l’état entre les appels, en tenant compte de l’état persistant par l’objet Encoder utilisé.
Si votre application gère les entrées de chaîne, vous devez utiliser les versions de chaîne de la GetBytes méthode.
La version de la mémoire tampon de caractères Unicode permet GetBytes(Char*, Int32, Byte*, Int32) certaines techniques rapides, en particulier avec plusieurs appels à l’aide de l’objet ou de l’insertion Encoder dans des mémoires tampons existantes. N’oubliez pas toutefois que cette version de méthode est parfois dangereuse, car les pointeurs sont requis.
Si votre application doit convertir une grande quantité de données, vous devez réutiliser la mémoire tampon de sortie. Dans ce cas, la GetBytes version qui prend en charge les tableaux d’octets est le meilleur choix.
Envisagez d’utiliser la Encoder.Convert méthode au lieu de GetByteCount. La méthode de conversion convertit autant de données que possible et lève une exception si la mémoire tampon de sortie est trop petite. Pour l’encodage continu d’un flux, cette méthode est souvent le meilleur choix.