Relazione tra codifica .NET e set di caratteri
-
06-07-2019 - |
Domanda
Qual è la relazione tra CharacterSet qui:
http://msdn.microsoft.com/en-us /library/ms709353(VS.85).aspx
e ASCII codifica qui:
http://msdn.microsoft .com / it-iT / Library / system.text.asciiencoding.getbytes (VS.71) aspx
Soluzione
ANSI è l'attuale codepage ANSI di Windows, equivalente a Encoding.Default.
OEM è l'attuale codepage OEM generalmente utilizzata dalle applicazioni della console.
Puoi ottenerlo usando:
Encoding.GetEncoding(CultureInfo.CurrentCulture.TextInfo.OEMCodePage)
In un'applicazione console, la codifica OEM sarà disponibile anche utilizzando
Console.OutputEncoding
Altri suggerimenti
Questo è davvero molto antico. ODBC risale all'età della pietra, quando Windows iniziò a prendere il posto di MS-DOS. All'epoca, un sacco di testo era ancora codificato nel set di caratteri IBM-PC originale, chiamato "OEM Character Set" da Microsoft. Il set IBM-PC standard aveva alcuni caratteri accentati e glifi pseudo grafici nella metà superiore, codici 0x80-0xff.
Troppo limitato per l'output di testo in lingue non inglesi, Microsoft ha iniziato a utilizzare pagine di codice, intervalli di glifi di caratteri adatti per un determinato gruppo di lingue. Il set di caratteri inglese americano è stato standardizzato da ANSI, quell'etichetta è ora attaccata (in modo errato) a qualsiasi tabella codici non OEM.
Nessuno codifica più il testo nel set di caratteri OEM, è andato sulla strada del dodo almeno 10 anni fa. L'impostazione corretta qui è ANSI. E tenendo le dita incrociate dietro la schiena, la tabella codici utilizzata per codificare il testo corrisponde alla tabella codici predefinita del sistema. Anche questo è dodo, Unicode l'ha risolto.
La breve risposta alla tua domanda, non esiste una relazione diretta.
La versione più lunga:
CharacterSet
per " Schema.ini " il file può essere ANSI
o OEM
.
ANSI e ASCII fanno riferimento a cose diverse.
Puoi leggere di più qui:
Comprensione dei caratteri ASCII e ANSI
ASCII vs ANSI Encoding di Alex Hoffman
Da quanto ho capito, CharacterSet = ANSI è equivalente a Encoding.Default . L'OEM potrebbe essere ASCIIEncoding allora.
Tuttavia, ANSI utilizza la tabella codici ANSI del sistema, pertanto potrebbero sorgere incompatibilità se si accede allo stesso file da computer con tabelle codici diverse.
Ho compilato il mio riferimento per passare tra i due:
Windows code page Name System.Text.Encoding schema.ini CharacterSet 20127 ASCII (US) ASCII 20127 1252 ANSI Latin I Default ANSI 65001 UTF-8 UTF8 65001 1200 UTF-16 LE Unicode Unicode 1201 UTF-16 BE BigEndianUnicode 1201