Cette documentation est archivée et n’est pas conservée.

Encoding, classe

Représente un codage de caractères.

Espace de noms: System.Text
Assembly : mscorlib (dans mscorlib.dll)

[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public abstract class Encoding : ICloneable
/** @attribute SerializableAttribute() */ 
/** @attribute ComVisibleAttribute(true) */ 
public abstract class Encoding implements ICloneable
SerializableAttribute 
ComVisibleAttribute(true) 
public abstract class Encoding implements ICloneable
Non applicable.

Le codage est le processus de transformation d'un jeu de caractères Unicode en une séquence d'octets. À l'inverse, le décodage est le processus qui consiste à transformer une séquence d'octets codés en un jeu de caractères Unicode. Notez que cette classe est destinée à opérer sur des caractères Unicode, et non sur des données binaires arbitraires (telles que des tableaux d'octets). Si votre application doit coder des données arbitraires en texte, elle doit utiliser un protocole tel qu'UUEncode, qui est implémenté par des méthodes telles que System.Convert.ToBase64CharArray.

La norme Unicode assigne un nombre appelé point de code à chaque caractère de chaque script pris en charge. Le format UTF (Unicode Transformation Format) est un mécanisme qui permet de coder le point de code. La norme Unicode version 3.2 utilise les formats UTF suivants :

  • UTF-8 qui représente chaque point de code sous la forme d'une séquence d'un à quatre octets ;

  • UTF-16 qui représente chaque point de code sous la forme d'une séquence d'un à deux entiers 16 bits ;

  • UTF-32 qui représente chaque point de code sous la forme d'un entier 32 bits.

Remarque AttentionAttention :

Bien que de nombreux codages non-Unicode soient pris en charge pour la compatibilité avec les applications héritées, les codages Unicode (UTF8Encoding, UnicodeEncoding et UTF32Encoding) sont recommandés lorsque le choix se présente. Pour des raisons de sécurité, lors de l'utilisation de codages, les applications doivent activer la détection d'erreurs ou fournir les valeurs encoderFallback et decoderFallback explicites offertes par les méthodes telles que GetEncoding. Le comportement par défaut est un secours « ajusté » qui peut provoquer des pertes d'informations inattendues, par exemple en matière de signes diacritiques. L'utilisation du secours ajusté peut également provoquer des failles de sécurité inattendues liées à l'usurpation d'identité.

Le .NET Framework fournit les implémentations suivantes de la classe Encoding pour prendre en charge les codages Unicode et autres :

  • ASCIIEncoding code les caractères Unicode en caractères ASCII simples de 7 bits. Ce codage ne prend en charge que les valeurs de caractères comprises entre U+0000 et U+007F. Page de codes 20127. Également disponible à travers la propriété ASCII.

  • UTF7Encoding code les caractères Unicode à l'aide du codage UTF-7. Ce codage prend en charge toutes les valeurs de caractères Unicode. Page de codes 65000. Également disponible à travers la propriété UTF7.

  • UTF8Encoding code les caractères Unicode à l'aide du codage UTF-8. Ce codage prend en charge toutes les valeurs de caractères Unicode. Page de codes 65001. Également disponible à travers la propriété UTF8.

  • UnicodeEncoding code les caractères Unicode à l'aide du codage UTF-16. Les deux ordres de primauté des octets sont pris en charge : primauté des octets de poids faible (little-endian, page de codes 1200) et primauté des octets de poids fort (big-endian, page de codes 1201). Également disponible via la propriété Unicode et la propriété BigEndianUnicode.

  • UTF32Encoding code les caractères Unicode à l'aide du codage UTF-32. Les deux ordres de primauté des octets sont pris en charge : primauté des octets de poids faible (little-endian, page de codes 65005) et primauté des octets de poids fort (big-endian, page de codes 65006). Également disponible via la propriété UTF32.

Vos applications utilisent la méthode GetEncoding pour obtenir d'autres codages. Elles doivent utiliser la méthode GetEncodings pour obtenir la liste de tous les codages.

Le tableau suivant répertorie les codages pris en charge et leurs pages de codes associées. Un astérisque dans la dernière colonne indique que la page de codes est prise en charge en mode natif par le .NET Framework, indépendamment de la plateforme sous-jacente.

Page de codes

Nom

Nom complet

37

IBM037

IBM EBCDIC (EU-Canada)

437

IBM437

OEM États-Unis

500

IBM500

IBM EBCDIC (International)

708

ASMO-708

Arabe (ASMO 708)

720

DOS-720

Arabe (DOS)

737

ibm737

Grec (DOS)

775

ibm775

Baltique (DOS)

850

ibm850

Europe de l'Ouest (DOS)

852

ibm852

Europe centrale (DOS)

855

IBM855

OEM Cyrillique

857

ibm857

Turc (DOS)

858

IBM00858

OEM Multilingue Latin I

860

IBM860

Portugais (DOS)

861

ibm861

Islandais (DOS)

862

DOS-862

Hébreu (DOS)

863

IBM863

Français canadien (DOS)

864

IBM864

Arabe (864)

865

IBM865

Nordique (DOS)

866

cp866

Cyrillique (DOS)

869

ibm869

Grec moderne (DOS)

870

IBM870

IBM EBCDIC (Multilingue Latin-2)

874

windows-874

Thaï (Windows)

875

cp875

IBM EBCDIC (Grec moderne)

932

shift_jis

Japonais (Shift-JIS)

936

gb2312

Chinois simplifié (GB2312)

*

949

ks_c_5601-1987

Coréen

950

big5

Chinois traditionnel (Big5)

1026

IBM1026

IBM EBCDIC (Turc Latin-5)

1047

IBM01047

IBM Latin-1

1140

IBM01140

IBM EBCDIC (EU-Canada-Euro)

1141

IBM01141

IBM EBCDIC (Allemagne-Euro)

1142

IBM01142

IBM EBCDIC (Danemark-Norvège-Euro)

1143

IBM01143

IBM EBCDIC (Finlande-Suède-Euro)

1144

IBM01144

IBM EBCDIC (Italie-Euro)

1145

IBM01145

IBM EBCDIC (Espagne-Euro)

1146

IBM01146

IBM EBCDIC (RU-Euro)

1147

IBM01147

IBM EBCDIC (France-Euro)

1148

IBM01148

IBM EBCDIC (International-Euro)

1149

IBM01149

IBM EBCDIC (Islandais-Euro)

1200

utf-16

Unicode

*

1201

unicodeFFFE

Unicode (avec primauté des octets de poids fort (big-endian))

*

1250

windows-1250

Europe centrale (Windows)

1251

windows-1251

Cyrillique (Windows)

1252

Windows -1252

Europe de l'Ouest (Windows)

*

1253

windows-1253

Grec (Windows)

1254

windows-1254

Turc (Windows)

1255

windows-1255

Hébreu (Windows)

1256

windows-1256

Arabe (Windows)

1257

windows-1257

Baltique (Windows)

1258

windows-1258

Vietnamien (Windows)

1361

Johab

Coréen (Johab)

10000

macintosh

Europe de l'Ouest (Mac)

10001

x-mac-japanese

Japonais (Mac)

10002

x-mac-chinesetrad

Chinois traditionnel (Mac)

10003

x-mac-korean

Coréen (Mac)

*

10004

x-mac-arabic

Arabe (Mac)

10005

x-mac-hebrew

Hébreu (Mac)

10006

x-mac-greek

Grec (Mac)

10007

x-mac-cyrillic

Cyrillique (Mac)

10008

x-mac-chinesesimp

Chinois simplifié (Mac)

*

10010

x-mac-romanian

Roumain (Mac)

10017

x-mac-ukrainian

Ukrainien (Mac)

10021

x-mac-thai

Thaï (Mac)

10029

x-mac-ce

Europe centrale (Mac)

10079

x-mac-icelandic

Islandais (Mac)

10081

x-mac-turkish

Turc (Mac)

10082

x-mac-croatian

Croate (Mac)

12000

utf-32

Unicode (UTF-32)

*

12001

utf-32BE

Unicode (UTF-32 avec primauté des octets de poids fort (big-endian))

*

20000

x-Chinese-CNS

Chinois traditionnel (CNS)

20001

x-cp20001

TCA Taïwan

20002

x-Chinese-Eten

Chinois traditionnel (Eten)

20003

x-cp20003

IBM5550 Taïwan

20004

x-cp20004

TeleText Taïwan

20005

x-cp20005

Wang Taïwan

20105

x-IA5

Europe de l'Ouest (IA5)

20106

x-IA5-German

Allemand (IA5)

20107

x-IA5-Swedish

Suédois (IA5)

20108

x-IA5-Norwegian

Norvégien (IA5)

20127

us-ascii

US-ASCII

*

20261

x-cp20261

T.61

20269

x-cp20269

ISO -6937

20273

IBM273

IBM EBCDIC (Allemagne)

20277

IBM277

IBM EBCDIC (Danemark-Norvège)

20278

IBM278

IBM EBCDIC (Finlande-Suède)

20280

IBM280

IBM EBCDIC (Italie)

20284

IBM284

IBM EBCDIC (Espagne)

20285

IBM285

IBM EBCDIC (RU)

20290

IBM290

IBM EBCDIC (Japonais katakana)

20297

IBM297

IBM EBCDIC (France)

20420

IBM420

IBM EBCDIC (Arabe)

20423

IBM423

IBM EBCDIC (Grec)

20424

IBM424

IBM EBCDIC (Hébreu)

20833

x-EBCDIC-KoreanExtended

IBM EBCDIC (Coréen étendu)

20838

IBM-Thaï

IBM EBCDIC (Thaï)

20866

koi8-r

Cyrillique (KOI8-R)

20871

IBM871

IBM EBCDIC (islandais)

20880

IBM880

IBM EBCDIC (Russe cyrillique)

20905

IBM905

IBM EBCDIC (Turc)

20924

IBM00924

IBM Latin-1

20932

EUC-JP

Japonais (JIS 0208-1990 et 0212-1990)

20936

x-cp20936

Chinois simplifié (GB2312-80)

*

20949

x-cp20949

Coréen Wansung

*

21025

cp1025

IBM EBCDIC (Serbe cyrillique-bulgare)

21866

koi8-u

Cyrillique (KOI8-U)

28591

iso-8859-1

Europe de l'Ouest (ISO)

*

28592

iso-8859-2

Europe centrale (ISO)

28593

iso-8859-3

Latin 3 (ISO)

28594

iso-8859-4

Baltique (ISO)

28595

iso-8859-5

Cyrillique (ISO)

28596

iso-8859-6

Arabe (ISO)

28597

iso-8859-7

Grec (ISO)

28598

iso-8859-8

Hébreu (ISO-Visual)

*

28599

iso-8859-9

Turc (ISO)

28603

iso-8859-13

Estonien (ISO)

28605

iso-8859-15

Latin 9 (ISO)

29001

x-Europa

Europe

38598

iso-8859-8-i

Hébreu (ISO-Logical)

*

50220

iso-2022-jp

Japonais (JIS)

*

50221

csISO2022JP

Japonais (JIS-Kana 1 octet)

*

50222

iso-2022-jp

Japonais (JIS-Kana 1 octet- SO/SI)

*

50225

iso-2022-kr

Coréen (ISO)

*

50227

x-cp50227

Chinois simplifié (ISO-2022)

*

51932

euc-jp

Japonais (EUC)

*

51936

EUC-CN

Chinois simplifié (EUC)

*

51949

euc-kr

Coréen (EUC)

*

52936

hz-gb-2312

Chinois simplifié (HZ)

*

54936

GB18030

Chinois simplifié (GB18030)

*

57002

x-iscii-de

ISCII Devanagari

*

57003

x-iscii-be

ISCII Bengali

*

57004

x-iscii-ta

ISCII Tamoul

*

57005

x-iscii-te

ISCII Télougou

*

57006

x-iscii-as

ISCII Assamais

*

57007

x-iscii-or

ISCII Oriya

*

57008

x-iscii-ka

ISCII Kannada

*

57009

x-iscii-ma

ISCII Malayalam

*

57010

x-iscii-gu

ISCII Gujarati

*

57011

x-iscii-pa

ISCII Pendjabi

*

65000

utf-7

Unicode (UTF-7)

*

65001

utf-8

Unicode (UTF-8)

*

La méthode GetByteCount détermine le nombre d'octets entraînant le codage d'un jeu de caractères Unicode, et la méthode GetBytes exécute ce codage.

De même, la méthode GetCharCount détermine le nombre de caractères entraînant le décodage d'une séquence d'octets, et la méthode GetChars procède au décodage effectif.

Si les données à convertir ne sont disponibles que sous la forme de blocs séquentiels (comme les données lues à partir d'un flux) ou si la quantité de données est si grande qu'elles doivent être divisées en blocs plus petits, utilisez Decoder ou Encoder fourni respectivement par la méthode GetDecoder ou GetEncoder d'une classe dérivée.

Les encodeurs UTF-16 et UTF-32 peuvent utiliser l'ordre d'octet avec primauté des octets de poids fort (big-endian) ou l'ordre d'octet avec primauté des octets de poids faible (little-endian). Par exemple, la majuscule latine A (U+0041) est sérialisée comme suit (au format hexadécimal) :

  • UTF-16 avec primauté des octets de poids fort (big-endian) : 00 41

  • UTF-16 avec primauté des octets de poids faible (little-endian) : 41 00

  • UTF-32 avec primauté des octets de poids fort (big-endian) : 00 00 00 41

  • UTF-32 avec primauté des octets de poids faible (little-endian) : 41 00 00 00

Le cas échéant, Encoding fournit un préambule, c'est-à-dire un tableau d'octets que vous pouvez ajouter en tant que préfixe à la séquence d'octets résultant du processus de codage. Si le préambule contient une marque d'ordre d'octet (point de code U+FEFF en Unicode), il aide le décodeur à déterminer l'ordre d'octet et le format UTF. La marque d'ordre d'octet Unicode est sérialisée comme suit (format hexadécimal) :

  • UTF-8 : EF BB BF

  • UTF-16 avec primauté des octets de poids fort (big-endian) : FE FF

  • UTF-16 avec primauté des octets de poids faible (little-endian) : FF FE

  • UTF-32 avec primauté des octets de poids fort (big-endian) : 00 00 FE FF

  • UTF-32 avec primauté des octets de poids faible (little-endian) : FF FE 00 00

Il est généralement plus efficace d'utiliser l'ordre d'octet natif pour stocker des caractères Unicode. Par exemple, il est préférable d'utiliser l'ordre d'octet avec primauté des octets de poids faible (little-endian) sur les plateformes little-endian, comme les ordinateurs Intel.

La méthode GetPreamble retourne un tableau d'octets qui peut contenir la marque d'ordre d'octet. Si ce tableau d'octets est ajouté comme préambule à un flux de données codé, il aide le décodeur à identifier le format de codage utilisé.

Pour plus d'informations sur l'ordre d'octet et les marques d'ordre d'octet, consultez la norme Unicode à l'adresse www.unicode.org.

L'exemple de code suivant convertit une chaîne depuis un codage vers un autre.

using System;
using System.Text;

namespace ConvertExample
{
   class ConvertExampleClass
   {
      static void Main()
      {
         string unicodeString = "This string contains the unicode character Pi(\u03a0)";

         // Create two different encodings.
         Encoding ascii = Encoding.ASCII;
         Encoding unicode = Encoding.Unicode;

         // Convert the string into a byte[].
         byte[] unicodeBytes = unicode.GetBytes(unicodeString);

         // Perform the conversion from one encoding to the other.
         byte[] asciiBytes = Encoding.Convert(unicode, ascii, unicodeBytes);
            
         // Convert the new byte[] into a char[] and then into a string.
         // This is a slightly different approach to converting to illustrate
         // the use of GetCharCount/GetChars.
         char[] asciiChars = new char[ascii.GetCharCount(asciiBytes, 0, asciiBytes.Length)];
         ascii.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0);
         string asciiString = new string(asciiChars);

         // Display the strings created before and after the conversion.
         Console.WriteLine("Original string: {0}", unicodeString);
         Console.WriteLine("Ascii converted string: {0}", asciiString);
      }
   }
}

package ConvertExample; 

import System.*;
import System.Text.*;

class ConvertExampleClass
{
    public static void main(String[] args)
    {
        String unicodeString = 
                "This string contains the unicode character Pi(\u03a0)";

        // Create two different encodings.
        Encoding ascii = Encoding.get_ASCII();
        Encoding unicode = Encoding.get_Unicode();

        // Convert the string into a byte[].
        ubyte unicodeBytes[] = unicode.GetBytes(unicodeString);

        // Perform the conversion from one encoding to the other.
        ubyte asciiBytes[] = Encoding.Convert(unicode, ascii, unicodeBytes);

        // Convert the new byte[] into a char[] and then into a string.
        // This is a slightly different approach to converting to illustrate
        // the use of GetCharCount/GetChars.
        char asciiChars[] = new 
                char[ascii.GetCharCount(asciiBytes, 0, asciiBytes.length)];
        ascii.GetChars(asciiBytes, 0, asciiBytes.length, asciiChars, 0);
        String asciiString = new String(asciiChars);

        // Display the strings created before and after the conversion.
        Console.WriteLine("Original string: {0}", unicodeString);
        Console.WriteLine("Ascii converted string: {0}", asciiString);
    } //main
} //ConvertExampleClass 

System.Object
  System.Text.Encoding
     Classes dérivées

Les membres statiques publics (Shared en Visual Basic) de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.

Windows 98, Windows Server 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile pour Pocket PC, Windows Mobile pour Smartphone, Windows Server 2003, Windows XP Édition Media Center, Windows XP Professionnel Édition x64, Windows XP SP2, Windows XP Starter Edition

Microsoft .NET Framework 3.0 est pris en charge sur Windows Vista, Microsoft Windows XP SP2 et Windows Server 2003 SP1.

.NET Framework

Prise en charge dans : 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Prise en charge dans : 2.0, 1.0

XNA Framework

Prise en charge dans : 1.0
Afficher: