2009-03-31 11 views
281

Qual è la differenza tra il Unicode, UTF8, UTF7, UTF16, UTF32, ASCII, e ANSI codifiche?Unicode, UTF, ASCII, ANSI differenze di formato

In che modo sono utili per i programmatori?

+5

molto correlati: [UTF-8 vs Unicode] (http://stackoverflow.com/questions/643694/utf-8-vs-unicode) –

+0

Il sito migliore per fare riferimento sarebbe: http: // msdn. microsoft.com/en-us/library/dd374081(VS.85).aspx – RamSri

+0

http://www.tugay.biz/2016/07/what-is-ascii-and-unicode-and-character.html –

risposta

390

Scendendo la vostra lista:

  • "Unicode" non è una codifica, anche se purtroppo, molta documentazione impreciso lo usa per riferirsi a qualsiasi codifica Unicode quel particolare sistema utilizza per impostazione predefinita. Su Windows e Java, questo spesso significa UTF-16; in molti altri luoghi, significa UTF-8. Correttamente, Unicode si riferisce al set di caratteri astratto stesso, non a una particolare codifica.
  • UTF-16: 2 byte per "unità di codice". Questo è il formato nativo delle stringhe in .NET e in generale in Windows e Java. I valori esterni allo Basic Multilingual Plane (BMP) sono codificati come coppie sostitutive. (Questi sono usati raramente - il che è un buon lavoro, visto che pochissimi sviluppatori riescono a farli correttamente, sospetto.) Dubbio che lo faccia.)
  • UTF-8: Codifica di lunghezza variabile, 1-4 byte per punto di codice. I valori ASCII sono codificati come ASCII usando 1 byte.
  • UTF-7: in genere utilizzato per la codifica della posta. Le probabilità sono che se pensi di averne bisogno e non stai facendo posta, ti sbagli. (Questa è solo la mia esperienza di persone che pubblicano nei newsgroup ecc. - al di fuori della posta, in realtà non è molto utilizzata.)
  • UTF-32: Codifica a larghezza fissa utilizzando 4 byte per punto di codice. Questo non è molto efficiente, ma rende la vita più facile al di fuori del BMP. Ho una classe .NET Utf32String come parte della mia libreria MiscUtil, nel caso la volessi. (Non è stato testato a fondo, intendiamoci.)
  • ASCII: codifica a byte singolo utilizzando solo i 7 bit inferiori. (Punti codice Unicode 0-127). Nessun accento ecc.
  • ANSI: non esiste una codifica ANSI fissa, ce ne sono molti. Di solito quando le persone dicono "ANSI" intendono "la locale predefinita/codepage per il mio sistema" che è ottenuta tramite Encoding.Default, ed è spesso Windows-1252 ma può essere altre impostazioni locali.

C'è di più su my Unicode page e tips for debugging Unicode problems.

L'altra grande risorsa di codice è unicode.org che contiene più informazioni di quante non sarai mai in grado di elaborare: forse il bit più utile è lo code charts.

+0

Penso davvero ad ANSI come [codice pagina 437] (http://en.wikipedia.org/wiki/Code_page_437Code), poiché quello era l'arte usata da ANSI . Tuttavia, non penso che sia disponibile in ASP.Net – lordscarlet

+2

Il termine "ANSI" quando applicato alle code page di Microsoft a 8 bit è un termine improprio. Erano basati su bozze presentate per la standardizzazione ANSI, ma ANSI stessa non li ha mai standardizzati. Windows-1252 (la tabella codici più comunemente denominata "ANSI") è simile a ISO 8859-1 (Latin-1), con la differenza che Windows-1252 ha caratteri stampabili nell'intervallo 0x80..0x9F, dove ISO 8859-1 ha caratteri di controllo in quell'intervallo. Unicode ha anche caratteri di controllo in quell'intervallo. https://en.wikipedia.org/wiki/Windows_code_page –

+0

@ JonSkeet, ho alcune pagine Web che inviano messaggi di posta elettronica. Attualmente usano UTF8. Dovrei pensare a cambiarli di nuovo in UTF7? – jp2code

53

qualche lettura per iniziare sulla codifica dei caratteri: Joel on Software: The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

Tra l'altro - ASP.NET non ha nulla a che fare con esso. Le codifiche sono universali.

+1

molto lettura informativa, grazie! –

+4

Risposto qui 6 anni dopo che l'articolo è stato scritto. L'ho letto 8 anni dopo la pubblicazione del post. 14 anni dopo è ancora una buona lettura. Questo è più della metà della mia vita fa. Incredibile. –

+1

Articolo stupefacente!Piacere di vedere l'autore ha fatto altre cose positive prima di creare stackoverflow ... –

Problemi correlati