Diff for "CharSet"

Differences between versions dated 2006-12-15 09:01:09 and 2006-12-16 14:53:36

Deletions are marked like this. Additions are marked like this.
Line 114: Line 114:
   Testo Usenet: 7/8 bit        [X] Codifica MIME dei campi header
   Testo email: Quoted printable (MIME) [X] Codifica MIME dei campi header
   Testo Usenet: 7/8 bit [X] Codifica MIME dei campi header
   Testo email:  7/8 bit        [X] Codifica MIME dei campi header
Line 126: Line 126:
   Usenet Text: 7/8 bit        [X] MIME headers
   Email Text: Quoted printable (MIME) [X] MIME headers
   Usenet Text: 7/8 bit [X] MIME headers
   Email Text:  7/8 bit        [X] MIME headers
Line 132: Line 132:
Con Xnews da solo non è possibile, occorre usare Mime-Proxy (vedi sotto) avendo "caricato" anche il
charset "iso-8859-15".
Con Xnews da solo non è possibile, occorre usare Mime-Proxy (vedi sotto) avendo "caricato" anche il charset "iso-8859-15".
Line 190: Line 189:
NB: Le vecchie versioni gratuite di Agent (Forté Free Agent), riescono a gestire correttamente i caratteri estesi solo a partire dalla versione 1.93. NB: Le vecchie versioni gratuite di Agent (Forté Free Agent), riescono a gestire correttamente i caratteri estesi solo a partire dalla versione 1.93, quindi è fortemente consigliato usare questa versione (o una superiore).
Line 338: Line 337:
}}} Dicembre 2006; Aggiornamento di Alan Ford, con aggiunta della codifica degli header
}}}

Breve guida all'uso dei caratteri estesi su Usenet

Indice

  1. Introduzione
  2. Le accentate su Usenet:
  3. Il caso particolare degli header
  4. Il simbolo dell'Euro
  5. Istruzioni per configurare correttamente alcuni newsreader
    1. MacSOUP, tin, Pan, KNode, Knews, Thoth, Dialog, Pimmy, XPN
    2. Forté Agent
    3. GnusEmacs
    4. MicroPlanet Gravity
    5. MesNews
    6. Mozilla Thunderbird
    7. MT-NewsWatcher
    8. Outlook Express
    9. PINE
    10. slrn
    11. XanaNews
    12. Xnews
  6. Mime-Proxy
  7. Ringraziamenti
  8. Storia delle revisioni

1. Introduzione

Viene riportato di seguito un interessante articolo sul problema delle accentate su Usenet (e più in generale sull'utilizzo dei caratteri estesi), apparso molto tempo fa su it.comp.software.newsreader.

L'averlo reso disponibile su wiki consentirà un aggiornamento continuo che (si spera) consentirà di evitare l'obsolescenza precoce di parte del suo contenuto (specificatamente, la parte dedicata alle impostazioni dei vari newsreader).

L'origine del presente documento è l'articolo:

 From: Marvin <marvin_gpp*despammed.com>
 Newsgroups: {it.comp.software.newsreader}
 Subject: E allora vuoi usare le accentate nei tuoi articoli?
 Date: Sun, 06 Jan 2002 22:46:52 +0100
 Organization: Sirius Cybernetics Corporation
 Lines: 211
 Message-ID: <a1ak4s.3vue6h7.1@marvin.gpp.despammed.com>

2. Le accentate su Usenet:

E allora vuoi usare le accentate nei tuoi articoli?

Per molti anni, una delle regole d'oro di Usenet in generale, e di it.* in particolare, è stata quella di non usare caratteri accentati, sostituendoli con apostrofi e apici: questa raccomandazione compare ancora in molte FAQ e manifesti di gruppi. Le ragioni di tale divieto sono legate alle difficoltà con le quali si è arrivati a definire gli standard per la trasmissione dei messaggi (sia di posta elettronica che dei newsgroup), ed alla lentezza con cui i produttori di newsreader hanno implementato tali standard.

Oggi (a più di trenta anni dallo sbarco sulla Luna) questi problemi sono stati in buona parte risolti, e quindi non c'è più ragione di mantenere un ostracismo completo verso i caratteri accentati. Questo però non significa che l'uso dei medesimi non richieda qualche attenzione supplementare. In sintesi, occorre solamente scegliere e configurare correttamente il proprio programma per le news (newsreader).

Questo è quanto. È inoltre ovvio che in lettura vada adoperato lo stesso charset di chi ha composto l'articolo, altrimenti i caratteri non saranno mostrati come originariamente desiderato dall'autore del post.

Se non sei interessato ai dettagli tecnici, puoi anche saltare all'ultima sezione di questo documento, dove sono riportate le istruzioni per configurare correttamente alcuni newsreader. Altrimenti, quella che segue è una breve spiegazione delle regole appena esposte.

Alla base del problema-accenti sta il fatto che originariamente i messaggi Usenet erano codificati unicamente in ASCII standard a 7 bit, che come noto non comprende le vocali accentate. L'adozione di set ASCII estesi (a 8 bit) è successivo, e se da una parte ha permesso l'utilizzo di un vasto numero di caratteri alfabetici localizzati, dall'altra ha creato una notevole fonte potenziale di confusione. Infatti esistono decine di versioni differenti di set ASCII estesi, ognuno creato per scopi particolari (ad esempio, per rappresentare i numerosi segni alfabetici europei, ma non solo).

Fortunatamente, alcuni di questi sono ora degli standard ISO: per le lingue europee, hanno particolare importanza i charset della famiglia iso-8859, ognuno dei quali è un set ASCII esteso formato da 256 caratteri. Ad esempio: Latin1 (iso-8859-1, Europa occidentale), che contiene i caratteri alfabetici comunemente usati in italiano, francese, tedesco, e altri; Latin2 (iso-8859-2, Europa centrale); Cyrillic (iso-8859-5, Europa dell'est), ecc.1

Ovviamente è necessario specificare, in ogni articolo, quale charset si è usato per comporre il proprio messaggio. Il rischio è, altrimenti, che A usi un charset per scrivere un messaggio, e che B ne usi uno diverso per leggerlo! Il posto giusto per fornire questa informazione è ovviamente tra gli header2, che comprenderanno qualcosa del tipo:

  Content-Type: text/plain; charset=iso-8859-1

O magari:

  Content-Type: text/plain; charset=iso-8859-2

Nel primo caso, se il newsreader incontrerà, ad esempio, il carattere nella posizione 0xE8 (cioè 232), farà apparire una "e" accentata; nel secondo, una specie di "c".

L'unica circostanza in cui l'indicazione del charset può essere omessa è quella in cui il messaggio contenga solo i 128 caratteri dell'ASCII standard a 7 bit (quindi le 26 lettere, i numeri, la punteggiatura, e poco altro). In quel caso, il newsreader assumerà per default che stiamo usando il buon vecchio ASCII standard, senza possibilità di equivoci.

Per l'italiano, è consigliabile usare il ben noto charset Latin1 (iso-8859-1), che comprende tutti i caratteri utili per scrivere in italiano corretto, o il più recente Latin9 (iso-8859-15), che comprende anche il simbolo dell'Euro (si veda anche il paragrafo dedicato al problema-Euro).

Altri tipi di charset (in particolare quelli della famiglia Windows, come il windows-1252) andrebbero utilizzati con cautela, solo una volta che ci siamo accertati che tutti i partecipanti sìano in grado di interpretarli correttamente (ad es. gli utenti di altri sistemi operativi); presentando appena piccole diversità rispetto a quelli ISO (ad es. le classiche virgolette alla Word), spesso il gioco non vale la candela.

Questo per quanto riguarda la corretta indicazione del charset. Adesso ogni singolo carattere deve essere codificato (encoding): il metodo raccomandato è l'"8 bit". Ciò significa che, almeno per quanto riguarda il charset iso-8859-1, il carattere "è" sarà rappresentato semplicemente dal byte 0xE8.

Altri tipi di codifica, come ad esempio il Quoted-Printable (in cui i caratteri over-127 vengono rappresentati tramite una sequenza di escape a 7 bit: la "è" del caso precedente sarebbe codificata con i tre caratteri "=E8"), o il Base64, sono invece sconsigliati, perché non forniscono maggiori informazioni di una normale codifica a 8 bit, appesantiscono inutilmente il messaggio, e aumentano il rischio di errori nella decodifica. Un discorso a parte merita l'UTF-8, che è una codifica di Unicode compatibile con ASCII e usata su Usenet3. Rispetto ai charset descritti precedentemente, ha il vantaggio di rendere disponibile l'intero set di caratteri Unicode, superando il limite dei 256 caratteri per volta; purtroppo però molti newsreader non lo interpretano ancora correttamente, e quindi si raccomanda di limitarne l'uso ai casi in cui non se ne può fare a meno.

Concludendo, il tipico messaggio news dovrà avere degli header che saranno di solito simili a questi:

   Mime-Version: 1.0
   Content-Type: text/plain; charset=iso-8859-1
   Content-Transfer-Encoding: 8bit

Indicati talvolta semplicemente come "header MIME"4.

3. Il caso particolare degli header

Con le adeguate precauzioni, quindi, il messaggio verrà letto e scritto correttamente. C'è però un caso particolare: tutto questo riguarda il corpo (body) del messaggio; che succede quando il carattere accentato è negli header?

Oggi, praticamente la quasi totalità dei principali newsreader sono in grado di inserire informazioni supplementari su charset e codifica, seguendo le RFC 2047. Così l'oggetto di un messaggio:

   Subject: Perché non mi funziona il threading?
Può diventare, ad esempio:
   Subject: =?iso-8859-1?Q?Perch=E9?= non mi funziona il threading?

Notate che nella forma codificata, non esiste nessun carattere a 8 bit (e non ci deve essere). Ovviamente gli stessi newsreader lo decodificheranno in fase di lettura e voi non vi accorgerete di nulla (a meno di non guardare il RAW dell'articolo - ovvero la sua forma grezza, non formattata).

Per chi ancora dovesse usare un newsreader non attrezzato a decodificare il MIME nelle header (oppure configurato male, oppure con qualche bug nella sua codifica/decodifica) vedrà un subject quasi incomprensibile; inoltre, se qualcuno di questi interverrà nel thread, il thread risulterà di fatto composto da articoli con subject differenti, con tutte le conseguenze che questo può avere per la corretta gestione dello stesso.

Questo è il motivo per cui, fino a qualche tempo fa, si consigliava di evitare accentate negli header (al nostro lato pratico interessano solo Subject e From), usando esclusivamente caratteri dell'ASCII standard a 7bit.

È perciò di fondamentale importanza usare (e configurare correttamente) un newsreader che rispetti lo standard delle RFC 2047 (altri possibili standard non sono ancora diffusi nei vari newsreader).

4. Il simbolo dell'Euro

Il simbolo dell'Euro è stato recentemente introdotto nel charset Latin9 (iso-8859-15), nella posizione 164. Tuttavia un buon numero di newsreader non è ancora attrezzato per gestire tale charset, e quindi il simbolo verrà a volte mostrato come la posizione 164 del Latin1 (una specie di "o"), o con un punto interrogativo.

Per essere sicuro che chiunque possa leggere correttamente il tuo messaggio, forse è meglio continuare a scrivere "euro", "EUR", o simili. Se proprio ci tieni ad usare il simbolo, devi almeno assicurarti che il tuo newsreader lo codifichi in maniera corretta, seguono degli esempi in proposito.

Con Forté [Free] Agent 1.93, versione italiana sono necessarie le seguenti modifiche solo se avete effettuato l'installazione come aggiornamento di una precedente versione (se avete effettuato una nuova installazione non è necessario fare nulla):

In Opzioni | Preferenze generali | Lingue dei messaggi:
   Code Page: Europa occidentale (Codepage 1252)
   Invio messaggi Usenet: Occidentale con Euro (US-ASCII, ISO 8859-1, ISO 8859-15, UTF8)
   Invio messaggi Email: Occidentale con Euro (US-ASCII, ISO 8859-1, ISO 8859-15, UTF8)
   Predefinito per messaggi ricevuti: Western Europe (windows-1252)
   Testo Usenet: 7/8 bit          [X] Codifica MIME dei campi header
   Testo email:  7/8 bit          [X] Codifica MIME dei campi header

Con Forté [Free] Agent 1.93, versione inglese, la stessa configurazione di cui sopra è necessaria in ogni caso, e si legge:

In Options | General Preferences | Languages:
   Code Page: Western Europe (Codepage 1252)
   Send Usenet as: Western with Euro (US-ASCII, ISO 8859-1, ISO 8859-15, UTF8)
   Send email as: Western with Euro (US-ASCII, ISO 8859-1, ISO 8859-15, UTF8)
   Default Charset: Western Europe (windows-1252)
   Usenet Text: 7/8 bit           [X] MIME headers
   Email Text:  7/8 bit           [X] MIME headers

Il charset "Occidentale no unicode" ("Western no unicode") è anche utilizzabile, ma in quel caso bisognerà evitare di inviare il messaggio con il set di caratteri denominato "Occidentale Windows-compatibile" ("Western Windows-compatible") che Agent può proporre in alcuni (rari) casi.

Con Xnews da solo non è possibile, occorre usare Mime-Proxy (vedi sotto) avendo "caricato" anche il charset "iso-8859-15".

Per i newsreader/mailreader per Windows che si appoggiano alle tabelle di codifica del sistema operativo (l'attuale versione di Pimmy ad esempio), può accadere che il file del Latino 9, pur presente sul disco, non sia reso disponibile nel registro di Windows.

Per risolvere la cosa occorre innanzitutto verificarne la presenza, cercando nel disco in cui è installato Windows, il file: c_28605.nls oppure cp_28605.nls (di solito sono nella cartella ..System32 o ..System).

Si crea poi un file di testo:

REGEDIT4

[HKEY_CLASSES_ROOT\MIME\Database\Charset\iso-8859-15]
"Codepage"=dword:000004e4
"InternetEncoding"=dword:00006fbd

[HKEY_CLASSES_ROOT\MIME\Database\Charset\latin9]
"AliasForCharset"="iso-8859-15"

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\control\Nls\Codepage]
"28605"="c_28605.nls"

[HKEY_CLASSES_ROOT\MIME\Database\Codepage\28605]
"BodyCharset"="iso-8859-15"
"Description"="Latino 9 (ISO-8859-15)"
"Family"=dword:000004e4
"Level"=hex:07,07,00,00

sostituendo eventualmente la riga:

"28605"="c_28605.nls"

con questa (se avete trovato il file cp_28605.nls):

"28605"="cp_28605.nls"

Rinominate il file in "Latino9.reg" ed eseguitelo.

SI RACCOMANDA DI EFFETTUARE PREVENTIVAMENTE UN BACKUP DEL REGISTRO DI SISTEMA:

http://support.microsoft.com/default.aspx?scid=kb;it-it;Q322756

5. Istruzioni per configurare correttamente alcuni newsreader

5.1. MacSOUP, tin, Pan, KNode, Knews, Thoth, Dialog, Pimmy, XPN

Questi programmi sono configurati correttamente di default, e non occorre fare nulla.

5.2. Forté Agent

Le impostazioni di questo client sono praticamente a posto di default, salvo probabilmente quelle per le header.

I settaggi giusti dalla versione 1.93 in avanti, sono comunque quelli scritti sopra, nel paragrafo dell'euro.

NB: Le vecchie versioni gratuite di Agent (Forté Free Agent), riescono a gestire correttamente i caratteri estesi solo a partire dalla versione 1.93, quindi è fortemente consigliato usare questa versione (o una superiore).

5.3. GnusEmacs

Aggiungere in .emacs la linea:

   (standard-display-european 1).

5.4. MicroPlanet Gravity

Le versioni antecedenti alla 2.70b hanno avuto qualche problema nella gestione dei charset, tali da consigliarne l'uso in abbinamento al Mime Proxy (vedere sotto); la versione attuale è notevolmente migliorata, va però configurata come segue.

Menu a discesa, View -> Global Options... scheda "Encoding"

Impostare:

Preferred character set:
iso-8859-1

[X] Send 8 bit characters
[ ] Send 8 bit chars in header lines

5.5. MesNews

Questo newsreader va praticamente bene così com'è installato di default. Riassumo comunque i settaggi:

File -> Parametri -> scheda "Charset"

controllare che sia spuntata l'opzione:
[X] Utilizza sempre un charset

e che l'elenco a discesa sia così impostato:
iso-8859-1
iso-8859-15
utf-8

Poi, sempre in File -> Parametri, ma stavolta nella scheda "Esperto", controllate che vi sia lo spunta nell'opzione:
[X] Codifica il campo From

5.6. Mozilla Thunderbird

Questo client dovrebbe avere le principali impostazioni corrette di default (salvo eventuali problemi di installazione/aggiornamento, dovuti ad esempio a profili danneggiati).

Il charset predefinito di uscita (e di lettura in mancanza di header Mime) è l'iso-8859-15 (il Latin9). Rispetto all'iso-8859-1, questo charset consente (tra l'altro) l'invio del simbolo dell'euro senza ricorrere all'utf-8, ma potrebbe non essere riconosciuto da alcuni vecchi sistemi operativi (vedere paragrafo sull'euro, sopra).

Per questi motivi, si riportano le impostazioni consigliate (congruenti con quanto sopra esposto), riferite alla versione 1.5:

Strumenti -> Opzioni...
Icona "Visualizzazione"
Scheda "Caratteri"

Posta in uscita:  Occidentale (ISO-8859-1)
Posta in entrata: Occidentale (Windows-1252)

[ ] Usa la codifica carattere predefinita a tutti i messaggi in arrivo
[ ] Usa la codifica carattere predefinita nelle risposte

5.7. MT-NewsWatcher

Nel menu:

Preferences | Message Options
Impostare:
Send with MIME
(Se non lo si fa, MT invierà comunque utilizzando il Latin1, ma non lo segnalerà negli header.)

5.8. Outlook Express

Nel menu:

   Strumenti | opzioni | invio | formato news | imposta testo normale | MIME
Impostare:
   metodo codifica: nessuno
   consenti 8 bit nelle intestazioni: lasciare vuoto
Nel menu:
   Strumenti | opzioni | invio | impostazioni internazionali
scegliere "Europa Occidentale (ISO)".

5.9. PINE

A partire dal menu principale, andare in (S)etup | (C)onfig, e:

Forse è più pratico premere W per ricercare l'opzione giusta, data la lunghezza della lista. Uscire premendo E.

5.10. slrn

Non occorre fare nulla, se il sistema operativo è configurato correttamente.
Per generare gli header MIME, aggiungere in ~/.slrnrc:

   set use_mime 1
   set mime_charset "iso-8859-1".

5.11. XanaNews

Questo newsreader ha ad oggi qualche problema nella gestione del MIME nelle header. Comunque, i settaggi principali sono i seguenti:

Tools -> Options...
Default Settings -> Posting Settings

Default Character Set: Europa Occidentale
e poco sotto, spuntare:

(o) MIME - Raw (oppure: MIME - Flowed)

5.12. Xnews

Se volete usare correttamente questo newsreader, dovete per forza farlo congiuntamente a Mime-Proxy (vedere sotto).

Inoltre se si adopera come sistema operativo Win2000 o WinXP, è necessario sostituire la dll "Riched32.dll", altrimenti le accentate non appariranno nel testo quotato o incollato. Basta scaricare la dll aggiornata dal sito ufficiale del programma (http://xnews.newsguy.com/), e decomprimerla della cartella del programma.

6. Mime-Proxy

Mime-Proxy è un piccolo programmino gratuito creato proprio per risolvere i problemi causati dai newsreader che non riescono a gestire correttamente i charset, come il succitato Xnews e le vecchie versioni di Gravity. È un programma da console, può venir avviato silenziosamente e lasciato in background senza che consumi grosse risorse o crei fastidi, e quello che fa è molto semplice: si interpone tra il client news ed il server e "aggiusta" tutti gli articoli in entrata ed in uscita, aggiungendo le dichiarazioni corrette negli header e correggendo eventuali errori nei body.
Il programma è disponibile qui: http://www.lamaiziere.net/mp_pagen.html
Una buona guida in italiano si può invece trovare presso: http://www.webalice.it/alanford/mimeproxy/mime.html (mirror: http://digilander.libero.it/xnews/mimeproxy/mime.html).

7. Ringraziamenti

Ringrazio tutti i partecipanti del gruppo it.comp.software.newsreader, senza l'aiuto dei quali non avrei potuto scrivere questo documento.

[6 gennaio 2002, Marvin]

8. Storia delle revisioni

Versione e data Commento
V 1.0 06/01/02 Prima versione del documento, a cura di Marvin (<marvin_gpp*despammed.com> oppure <marvinus*inwind.IT>, inviata al NG it.comp.software.newsreader
V 1.0a 07/09/03 Il documento viene portato su wiki da Gesu`
Dicembre 2006 Aggiornamento di Alan Ford, con aggiunta della codifica degli header

  • 1 Per un elenco completo dei charset della famiglia ISO-8859, si veda http://czyborra.com/charsets/iso8859.html Per chi intendesse approfondire ulteriormente, un ottimo punto di partenza (in inglese) può essere il sito curato dal finlandese Jukka Korpela, ricco di esempi, tabelle e link esterni su questo vasto e complesso argomento <http://www.cs.tut.fi/~jkorpela/chars.html> "A tutorial on character code issues"
  • 2 Tutti i newsreader nascondono la maggior parte degli header all'utente, per migliorare la leggibilità del messaggio. Meglio di tutti li nasconde Outlook Express, tanto che molti suoi utenti non li hanno mai visti: "File | Proprietà | Dettagli | Messaggio originale" (oppure CTRL+F3).
  • 3 In realtà nello standard MIME si usa una nomenclatura che può creare delle confusioni. Per mappare i byte di una mail ad un preciso carattere occorrono tre differenti tipi di informazioni: 1) la codifica di trasporto *della mail*, informazione riportata nell'Header "Content-Transfer-Encoding: " che può essere "binary, 8bit, 7bit, quoted-printable, base64"; 2) il set di caratteri usato (ISO 8859-1, Unicode, etc.); 3) la codifica del *set di caratteri* (UTF-8, UTF-7, UCS-32BE, etc.). Queste due ultime informazioni vengono combinate nel parametro "charset= " dell'Header "Content-Type: ", quindi il termine "codifica" può riferisi sia alla codifica usata per il trasporto dell'email (come il quoted-printable o base64) sia a quella che serve a rappresentare il set di caratteri usato (UTF-8 ecc...). Questa nota è stata tratta da un intervento di Russ Allbery su news.software.nntp
  • 4 MIME = Multipurpose Internet Mail Extensions (RFC 2045)