Classe Encoding (System.Text)

Cambia visualizzazione:
ScriptFree
Riferimento a .NET Framework
Classe Encoding

Rappresenta una codifica di caratteri.

Spazio dei nomi: System.Text
Assembly: mscorlib (in mscorlib.dll)

Sintassi

Visual Basic - (Dichiarazione)
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public MustInherit Class Encoding
	Implements ICloneable
Visual Basic (Utilizzo)
Dim instance As Encoding

C#
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public abstract class Encoding : ICloneable
C++
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public ref class Encoding abstract : ICloneable
J#
/** @attribute SerializableAttribute() */ 
/** @attribute ComVisibleAttribute(true) */ 
public abstract class Encoding implements ICloneable
JScript
SerializableAttribute 
ComVisibleAttribute(true) 
public abstract class Encoding implements ICloneable
Note

La codifica è il processo di trasformazione di un insieme di caratteri Unicode in una sequenza di byte. La decodifica è il processo inverso, ovvero la trasformazione di una sequenza di byte codificati in un insieme di caratteri Unicode.

Secondo lo standard Unicode viene assegnato un punto di codice (un numero) a ciascun carattere in ogni script supportato. Un formato UTF (Unicode Transformation Format) consente di codificare tale punto di codice. Nello standard Unicode versione 3.2 vengono utilizzati i seguenti formati UTF:

  • UTF-8, che rappresenta ogni punto di codice come una sequenza da uno a quattro byte.

  • UTF-16, che rappresenta ogni punto di codice come una sequenza di uno o due valori integer a 16 bit.

  • UTF-32, che rappresenta ogni punto di codice come valore integer a 32 bit.

Di seguito sono riportate le implementazioni della classe Encoding fornite da .NET Framework per supportare le attuali codifiche Unicode e altre codifiche:

  • ASCIIEncoding consente di codificare caratteri Unicode come caratteri singoli ASCII a 7 bit. La codifica supporta solo valori di carattere compresi tra U+0000 e U+007F. Tabella codici 20127. Disponibile anche tramite la proprietà ASCII.

  • UTF7Encoding codifica i caratteri Unicode utilizzando la codifica UTF-7. La codifica supporta i valori di tutti i caratteri Unicode. Tabella codici 65000. Disponibile anche tramite la proprietà UTF7.

  • UTF8Encoding codifica i caratteri Unicode utilizzando la codifica UTF-8. La codifica supporta i valori di tutti i caratteri Unicode. Tabella codici 65001. Disponibile anche tramite la proprietà UTF8.

  • UnicodeEncoding codifica i caratteri Unicode utilizzando la codifica UTF-16. Sono supportati gli ordini di byte "little-endian" (tabella codici 1200) e "big-endian" (tabella codici 1201). Disponibile anche tramite le proprietà Unicode e BigEndianUnicode.

  • UTF32Encoding codifica i caratteri Unicode utilizzando la codifica UTF-32. Sono supportati gli ordini di byte "little-endian" (tabella codici 65005) e "big-endian" (tabella codici 65006). Disponibile anche tramite la proprietà UTF32.

Utilizzare il metodo GetEncoding per ottenere altre codifiche. Utilizzare il metodo GetEncodings per ottenere un elenco di tutte le modifiche.

Nella tabella riportata di seguito sono elencate tutte le codifiche e le tabelle codici associate. Un asterisco visualizzato nell'ultima colonna indica che la tabella codici è supportata in modo nativo da .NET Framework, indipendentemente dalla piattaforma sottostante.

Tabella codici

Name

Nome visualizzato

37

IBM037

IBM EBCDIC (Stati Uniti-Canada)

437

IBM437

OEM Stati Uniti

500

IBM500

IBM EBCDIC (Internazionale)

708

ASMO-708

Arabo (ASMO 708)

720

DOS-720

Arabo (DOS)

737

ibm737

Greco (DOS)

775

ibm775

Baltico (DOS)

850

ibm850

Europa occidentale (DOS)

852

ibm852

Europa centrale (DOS)

855

IBM855

OEM Cirillico

857

ibm857

Turco (DOS)

858

IBM00858

OEM Latino multilingue I

860

IBM860

Portoghese (DOS)

861

ibm861

Islandese (DOS)

862

DOS-862

Ebraico (DOS)

863

IBM863

Francese - Canada (DOS)

864

IBM864

Arabo (864)

865

IBM865

Nordico (DOS)

866

cp866

Cirillico (DOS)

869

ibm869

Greco moderno (DOS)

870

IBM870

IBM EBCDIC (Latino multilingue 2)

874

windows-874

Thai (Windows)

875

cp875

IBM EBCDIC (Greco moderno)

932

shift_jis

Giapponese (Shift-JIS)

936

gb2312

Cinese semplificato (GB2312)

*

949

ks_c_5601-1987

Coreano

950

big5

Cinese tradizionale (Big5)

1026

IBM1026

IBM EBCDIC (Turco Latino 5)

1047

IBM01047

IBM Latino 1

1140

IBM01140

IBM EBCDIC (Stati Uniti-Canada-Europa)

1141

IBM01141

IBM EBCDIC (Germania-Europa)

1142

IBM01142

IBM EBCDIC (Danimarca-Norvegia-Europa)

1143

IBM01143

IBM EBCDIC (Finlandia-Svezia-Europa)

1144

IBM01144

IBM EBCDIC (Italia-Europa)

1145

IBM01145

IBM EBCDIC (Spagna-Europa)

1146

IBM01146

IBM EBCDIC (Regno Unito-Europa)

1147

IBM01147

IBM EBCDIC (Francia-Europa)

1148

IBM01148

IBM EBCDIC (Internazionale-Europa)

1149

IBM01149

IBM EBCDIC (Islandese-Europa)

1200

utf-16

Unicode

*

1201

unicodeFFFE

Unicode (Big-Endian)

*

1250

windows-1250

Europa centrale (Windows)

1251

windows-1251

Cirillico (Windows)

1252

Windows -1252

Europa occidentale (Windows)

*

1253

windows-1253

Greco (Windows)

1254

windows-1254

Turco (Windows)

1255

windows-1255

Ebraico (Windows)

1256

windows-1256

Arabo (Windows)

1257

windows-1257

Baltico (Windows)

1258

windows-1258

Vietnamita (Windows)

1361

JoHab

Coreano (JoHab)

10000

macintosh

Europa occidentale (Macintosh)

10001

x-mac-japanese

Giapponese (Macintosh)

10002

x-mac-chinesetrad

Cinese tradizionale (Macintosh)

10003

x-mac-korean

Coreano (Macintosh)

*

10004

x-mac-arabic

Arabo (Macintosh)

10005

x-mac-hebrew

Ebraico (Macintosh)

10006

x-mac-greek

Greco (Macintosh)

10007

x-mac-cyrillic

Cirillico (Macintosh)

10008

x-mac-chinesesimp

Cinese semplificato (Macintosh)

*

10010

x-mac-romanian

Romeno (Macintosh)

10017

x-mac-ukrainian

Ucraino (Macintosh)

10021

x-mac-thai

Thai (Macintosh)

10029

x-mac-ce

Europa centrale (Macintosh)

10079

x-mac-icelandic

Islandese (Macintosh)

10081

x-mac-turkish

Turco (Macintosh)

10082

x-mac-croatian

Croato (Macintosh)

20000

x-Chinese-CNS

Cinese tradizionale (CNS)

20001

x-cp20001

TCA Taiwan

20002

x-Chinese-Eten

Cinese tradizionale (Eten)

20003

x-cp20003

IBM5550 Taiwan

20004

x-cp20004

TeleText Taiwan

20005

x-cp20005

Wang Taiwan

20105

x-IA5

Europa occidentale (IA5)

20106

x-IA5-German

Tedesco (IA5)

20107

x-IA5-Swedish

Svedese (IA5)

20108

x-IA5-Norwegian

Norvegese (IA5)

20127

us-ascii

US-ASCII

*

20261

x-cp20261

T.61

20269

x-cp20269

ISO -6937

20273

IBM273

IBM EBCDIC (Germania)

20277

IBM277

IBM EBCDIC (Danimarca-Norvegia)

20278

IBM278

IBM EBCDIC (Finlandia-Svezia)

20280

IBM280

IBM EBCDIC (Italia)

20284

IBM284

IBM EBCDIC (Spagna)

20285

IBM285

IBM EBCDIC (Regno Unito)

20290

IBM290

IBM EBCDIC (Giapponese Katakana)

20297

IBM297

IBM EBCDIC (Francia)

20420

IBM420

IBM EBCDIC (Arabo)

20423

IBM423

IBM EBCDIC (Greco)

20424

IBM424

IBM EBCDIC (Ebraico)

20833

x-EBCDIC-KoreanExtended

IBM EBCDIC (Coreano esteso)

20838

IBM-Thai

IBM EBCDIC (Thai)

20866

koi8-r

Cirillico (KOI8-R)

20871

IBM871

IBM EBCDIC (Islandese)

20880

IBM880

IBM EBCDIC (Cirillico russo)

20905

IBM905

IBM EBCDIC (Turco)

20924

IBM00924

IBM Latino 1

20932

EUC-JP

Giapponese (JIS 0208-1990 e 0212-1990)

20936

x-cp20936

Cinese semplificato (GB2312-80)

*

20949

x-cp20949

Coreano Wansung

*

21025

cp1025

IBM EBCDIC (Cirillico Serbo-Bulgaro)

21866

koi8-u

Cirillico (KOI8-U)

28591

iso-8859-1

Europa occidentale (ISO)

*

28592

iso-8859-2

Europa centrale (ISO)

28593

iso-8859-3

Latin 3 (ISO)

28594

iso-8859-4

Baltico (ISO)

28595

iso-8859-5

Cirillico (ISO)

28596

iso-8859-6

Arabo (ISO)

28597

iso-8859-7

Greco (ISO)

28598

iso-8859-8

Ebraico (ISO-Visual)

*

28599

iso-8859-9

Turco (ISO)

28603

iso-8859-13

Estone (ISO)

28605

iso-8859-15

Latino 9 (ISO)

29001

x-Europa

Europa

38598

iso-8859-8-i

Ebraico (ISO-Logical)

*

50220

iso-2022-jp

Giapponese (JIS)

*

50221

csISO2022JP

Giapponese (JIS-consente Kana a 1 byte)

*

50222

iso-2022-jp

Giapponese (JIS-consente Kana a 1 byte - SO/SI)

*

50225

iso-2022-kr

Coreano (ISO)

*

50227

x-cp50227

Cinese semplificato (ISO-2022)

*

51932

euc-jp

Giapponese (EUC)

*

51936

EUC-CN

Cinese semplificato (EUC)

*

51949

euc-kr

Coreano (EUC)

*

52936

hz-gb-2312

Cinese semplificato (HZ)

*

54936

GB18030

Cinese semplificato (GB18030)

*

57002

x-iscii-de

ISCII Devanagari

*

57003

x-iscii-be

ISCII Bengalese

*

57004

x-iscii-ta

ISCII Tamil

*

57005

x-iscii-te

ISCII Telugu

*

57006

x-iscii-as

ISCII Assamese

*

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 Punjabi

*

65000

utf-7

Unicode (UTF-7)

*

65001

utf-8

Unicode (UTF-8)

*

65005

utf-32

Unicode (UTF-32)

*

65006

utf-32BE

Unicode (UTF-32 Big-Endian)

*

Il metodo GetByteCount consente di determinare il numero di byte risultanti dalla codifica di un set di caratteri Unicode, mentre il metodo GetBytes consente di eseguire la codifica.

Analogamente, il metodo GetCharCount consente di determinare il numero di caratteri risultanti dalla decodifica di una sequenza di byte, mentre il metodo GetChars esegue la decodifica effettiva.

Se i dati da convertire sono disponibili solo in blocchi sequenziali (ad esempio i dati letti da un flusso) o se la quantità di dati è talmente elevata da richiedere la suddivisione in blocchi di dimensioni inferiori, utilizzare l'oggetto Decoder o Encoder fornito dal metodo GetDecoder o GetEncoder, rispettivamente, di una classe derivata.

I codificatori UTF-16 e UTF-32 possono utilizzare l'ordine dei byte big-endian (byte più significativo al primo posto) o little-endian (byte meno significativo al primo posto). La lettera A maiuscola dell'alfabeto latino (U+0041), ad esempio, è serializzata come segue in formato esadecimale:

  • Ordine dei byte big-endian UTF-16: 00 41

  • Ordine dei byte little-endian UTF-16: 41 00

  • Ordine dei byte big-endian UTF-32: 00 00 00 41

  • Ordine dei byte little-endian UTF-32: 41 00 00 00

L'oggetto Encoding può anche fornire un preambolo, ovvero una matrice di byte utilizzabile come prefisso della sequenza di byte risultante dal processo di codifica. Se il preambolo contiene un indicatore per l'ordine dei byte (in Unicode, punto di codice U+FEFF), consente al decodificatore di determinare l'ordine dei byte e il formato di trasformazione o UTF. L'indicatore per l'ordine dei byte Unicode è serializzato come segue (in formato esadecimale):

  • UTF-8: EF BB BF

  • Ordine dei byte big-endian UTF-16: FE FF

  • Ordine dei byte little-endian UTF-16: FF FE

  • Ordine dei byte big-endian UTF-32: 00 00 FE FF

  • Ordine dei byte little-endian UTF-32: FF FE 00 00

In genere è più efficiente l'archiviazione dei caratteri Unicode nell'ordine dei byte nativo. Si consiglia ad esempio di utilizzare l'ordine dei byte little-endian su piattaforme little-endian, quali i computer Intel.

Il metodo GetPreamble restituisce una matrice di byte che può includere l'indicatore dell'ordine dei byte. Se questa matrice di byte viene utilizzata come prefisso di un flusso codificato, consente al decodificatore di identificare il formato di codifica utilizzato.

Per ulteriori informazioni sull'ordine dei byte e sull'indicatore per l'ordine dei byte, vedere lo standard Unicode all'indirizzo www.unicode.org (informazioni in lingua inglese).

Esempio

Nell'esempio di codice riportato di seguito una stringa viene convertita da una codifica a un'altra.

Visual Basic
Imports System
Imports System.Text
Imports Microsoft.VisualBasic

Namespace Convert_Example
    Class MyConvertExampleClass
        Shared Sub Main()
            Dim unicodeString As String = "This string contains the unicode character Pi(" & ChrW(&H03A0) & ")"

            ' Create two different encodings.
            Dim ascii As Encoding = Encoding.ASCII
            Dim [unicode] As Encoding = Encoding.Unicode

            ' Convert the string into a byte[].
            Dim unicodeBytes As Byte() = [unicode].GetBytes(unicodeString)

            ' Perform the conversion from one encoding to the other.
            Dim asciiBytes As Byte() = 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.
            Dim asciiChars(ascii.GetCharCount(asciiBytes, 0, asciiBytes.Length)) As Char
            ascii.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0)
            Dim asciiString As 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)
        End Sub
    End Class
End Namespace

C#
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);
      }
   }
}

C++
using namespace System;
using namespace System::Text;
int 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->Item[].
   array<Byte>^unicodeBytes = unicode->GetBytes( unicodeString );
   
   // Perform the conversion from one encoding to the other.
   array<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.
   array<Char>^asciiChars = gcnew array<Char>(ascii->GetCharCount( asciiBytes, 0, asciiBytes->Length ));
   ascii->GetChars( asciiBytes, 0, asciiBytes->Length, asciiChars, 0 );
   String^ asciiString = gcnew String( asciiChars );
   
   // Display the strings created before and after the conversion.
   Console::WriteLine( "Original String*: {0}", unicodeString );
   Console::WriteLine( "Ascii converted String*: {0}", asciiString );
}


J#
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 

Gerarchia di ereditarietà

System.Object
  System.Text.Encoding
     Classi derivate
Codice thread safe

I membri statici pubblici (Shared in Visual Basic) di questo tipo sono validi per le operazioni multithreading. I membri di istanza non sono garantiti come thread safe.
Piattaforme

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile per Pocket PC, Windows Mobile per Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema.

Informazioni sulla versione

.NET Framework

Supportato in: 2.0 1.1 1.0

.NET Compact Framework

Supportato in: 2.0 1.0
Vedere anche