Assembly: mscorlib (in mscorlib.dll)
<SerializableAttribute> _ <ComVisibleAttribute(True)> _ Public MustInherit Class Encoding Implements ICloneable
Dim instance As Encoding
[SerializableAttribute] [ComVisibleAttribute(true)] public abstract class Encoding : ICloneable
[SerializableAttribute] [ComVisibleAttribute(true)] public ref class Encoding abstract : ICloneable
/** @attribute SerializableAttribute() */ /** @attribute ComVisibleAttribute(true) */ public abstract class Encoding implements ICloneable
SerializableAttribute ComVisibleAttribute(true) public abstract class Encoding implements ICloneable
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).
Nell'esempio di codice riportato di seguito una stringa viene convertita da una codifica a un'altra.
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
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); } } }
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 ); }
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.Text.Encoding
Classi derivate
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.