Che cos'è il formato ANSI?


Risposte:


246

La codifica ANSI è un termine leggermente generico utilizzato per fare riferimento alla tabella codici standard su un sistema, in genere Windows. È più correttamente indicato come Windows-1252 su sistemi occidentali / statunitensi. (Può rappresentare alcune altre codici di Windows su altri sistemi.) Questa è essenzialmente un'estensione del set di caratteri ASCII in quanto include tutti i caratteri ASCII con ulteriori 128 caratteri. Questa differenza è dovuta al fatto che la codifica "ANSI" è 8 bit anziché 7 bit come ASCII (ASCII è quasi sempre codificata al giorno d'oggi come byte a 8 bit con MSB impostato su 0). Vedi l'articolo per una spiegazione del perché questa codifica viene generalmente definita ANSI.

Il nome "ANSI" è un termine improprio, poiché non corrisponde a nessuno standard ANSI effettivo, ma il nome è rimasto bloccato. ANSI non è uguale a UTF-8.


42
ANSI non è solo un termine "lieve", è un nome completamente sbagliato. Questo nome implica chiaramente che qualunque cosa faccia riferimento è uno standard ANSI, che non lo è; questa è una questione di fatto in bianco e nero. Detto questo, è così ampiamente usato che ne siamo bloccati.
Nate CK,

1
Conosco ANSI come Pagina codice 437, non Pagina codice 1252 di Windows. Quando ANSI si riferiva alla grafica creata per i sistemi di bacheca elettronica, posso praticamente garantire che sia così.
lordscarlet,

@lordscarlet: ANSI non li ha standardizzati, ma Windows-1252 è il più vicino che ottieni (almeno su Windows), in quanto è un superset. Vedi en.wikipedia.org/wiki/ANSI_codepage#ANSI per riferimento.
Noldorin,

4
"ANSI" non si riferisce chiaramente a nessuno standard ANSI, tuttavia è un dato di fatto che è possibile scegliere "Codifica: ANSI", ad esempio in Blocco note quando si salva un file. E la vera domanda è: "Che cosa significa"? Questa risposta è di gran lunga la migliore.
Wernfried Domscheit,

1
Nel mio caso, l'ANSI si riferiva a windows-1254.
Ramazan Polat,

59

Tecnicamente, ANSI dovrebbe essere uguale a US-ASCII. Si riferisce allo standard ANSI X3.4, che è semplicemente la versione ratificata di ASCII dell'organizzazione ANSI . L'uso dei caratteri del set di bit superiore non è definito in ASCII / ANSI in quanto è un set di caratteri a 7 bit.

Tuttavia anni di uso improprio del termine da parte del DOS e successivamente della comunità di Windows ha lasciato il suo significato pratico come "la tabella di codici di sistema di qualunque macchina venga utilizzata". La codepage di sistema è talvolta nota anche come "mbcs", poiché sui sistemi dell'Asia orientale può essere una codifica a più byte per carattere. Alcune code page possono persino usare byte top-bit-clear come byte finali in una sequenza multibyte, quindi non è nemmeno strettamente compatibile con il semplice ASCII ... ma anche allora, è ancora chiamato "ANSI".

Sulle impostazioni predefinite degli Stati Uniti e dell'Europa occidentale, "ANSI" si associa alla codepage di Windows 1252. Questo non è lo stesso di ISO-8859-1 (sebbene sia abbastanza simile). Su altre macchine potrebbe essere qualsiasi altra cosa. Ciò rende "ANSI" assolutamente inutile come identificatore di codifica esterno.


32

A rigor di termini, non esiste una codifica ANSI. Colloquialmente il termine ANSI è usato per diverse codifiche:

  1. ISO 8859-1
  2. Windows CP1252
  3. Codifica del sistema corrente su un computer Windows (nella terminologia dell'API Win32).

Questo è sbagliato. La tabella codici 1252 di Windows è stata creata in base a ISO 8859-1 ma non è completamente uguale. Il termine ANSI fa riferimento allo standard ISO 8859-x.
Patrik,

17

Una volta Microsoft, come tutti gli altri, utilizzava set di caratteri a 7 bit e ne inventava i propri quando li si adattava, sebbene mantenessero ASCII come sottoinsieme di core. Quindi si sono resi conto che il mondo era passato alle codifiche a 8 bit e che c'erano standard internazionali in circolazione, come la famiglia ISO-8859. A quei tempi, se volevi procurarti uno standard internazionale e vivevi negli Stati Uniti, l'hai acquistato dall'American National Standards Institute, ANSI, che ha ripubblicato gli standard internazionali con il proprio marchio e numeri (questo perché il governo degli Stati Uniti vuole conformità agli standard americani, non agli standard internazionali). Quindi la copia di Microsoft ISO-8859 riportava "ANSI" sulla copertina. E poiché a quei tempi Microsoft non era molto abituata agli standard, non mi rendo conto che ANSI ha pubblicato anche molti altri standard. Quindi hanno fatto riferimento agli standard della famiglia ISO-8859 (e alle varianti che hanno inventato, perché non capivano davvero gli standard in quei giorni) con il nome sulla copertina, "ANSI", e si sono fatti strada in Microsoft documentazione per l'utente e quindi nella comunità di utenti. È successo circa 30 anni fa, ma a volte ancora oggi senti il ​​nome.


gli standard erano roba del settore, quindi i programmatori erano nuovi agli standard poiché era un nuovo settore?
CoffeDeveloper

1
Non era un nuovo settore al momento della fondazione di Microsoft.
Michael Kay,

Microsoft ha un atteggiamento problematico e controverso verso l'interoperabilità in generale. Quando decisero alla fine degli anni '90 di "abbracciare ed estendere" gli standard invece di evitarli direttamente, quello fu un cambiamento notevole, sebbene non fosse ancora un approccio responsabile verso una corretta interoperabilità. (Si potrebbe sostenere che il progresso è impossibile se, se effettuata solo per gli standard esistenti, ma non è, ovviamente, il motivo principale lo fanno in questo modo.)
tripleee

14

ASCII definisce solo una tabella codici a 7 bit con 128 simboli. ANSI estende questo a 8 bit e ci sono diverse pagine di codice diverse per i simboli da 128 a 255.

La denominazione ANSI non è corretta perché in realtà è la norma ISO / IEC 8859 che definisce queste pagine di codice. Vedere ISO / IEC 8859 per riferimento. Esistono 16 pagine di codici ISO / IEC 8859-1 a ISO / IEC 8859-16.

Windows-1252 è di nuovo basato su ISO / IEC 8859-1 con alcune modifiche principalmente nell'intervallo del controllo C1 impostato tra 128 e 159. Wikipedia afferma che Windows-1252 è anche chiamato ISO-8859-1 con un secondo trattino tra ISO e 8859. (Incredibile! Chi fa qualcosa del genere?!?)


5

Fondamentalmente "ANSI" si riferisce alla tabella codici legacy su Windows. Vedi anche un articolo di Raymond Chen su questo argomento:

La fonte di ciò deriva dal fatto che la code page di Windows 1252 era originariamente basata su una bozza ANSI, che divenne lo standard ISO 8859-1.

I primi 127 caratteri sono identici a ASCII nella maggior parte delle pagine di codice, tuttavia i caratteri superiori variano.

Tuttavia, ANSI non non significa automaticamente CP1252 o Latin 1.

Nonostante tutta la confusione, dovresti semplicemente evitare tali problemi al giorno d'oggi e utilizzare Unicode.


4

Nel caso in cui il tuo PC non sia un PC "occidentale" e non sai quale tabella codici venga utilizzata, puoi dare un'occhiata a questa pagina: Riferimento API National Language Support (NLS)

[Microsoft ha rimosso questo riferimento, prendilo dal riferimento API National Language Support (NLS) dell'archivio web

Oppure puoi eseguire una query sul registro:

C:\>reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage /f ACP

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage
    ACP    REG_SZ    1252

End of search: 1 match(es) found.

C:\>

2

Quando si utilizzano caratteri a byte singolo, il formato ASCII definisce i primi 127 caratteri. I caratteri estesi da 128 a 255 sono definiti da varie code page ANSI per consentire un supporto limitato per altre lingue. Per dare un senso a una stringa codificata ANSI, è necessario sapere quale tabella codici utilizza.



-4

ANSI (aka Windows-1252 / WinLatin1) è una codifica dei caratteri dell'alfabeto latino, abbastanza simile a ISO-8859-1 . Potresti dare un'occhiata a Wikipedia .


6
Non è CP1252 per tutti; dipende molto dalla regione.
Joey,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.