# Leggere un file iso8859-15 e convertirlo in utf8

**URL:** <https://www.ruby-forum.com/t/leggere-un-file-iso8859-15-e-convertirlo-in-utf8/179374>\
**Category:** IT\
**Created:** [November 23, 2009, 7:52pm UTC](https://www.ruby-forum.com/t/leggere-un-file-iso8859-15-e-convertirlo-in-utf8/179374 "2009-11-23T19:52:14Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![matteobo77](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/c0e974/32.png) [@matteobo77](https://www.ruby-forum.com/u/matteobo77)\
**Post date:** [November 23, 2009, 7:52pm UTC](https://www.ruby-forum.com/t/leggere-un-file-iso8859-15-e-convertirlo-in-utf8/179374/1 "2009-11-23T19:52:14Z")

</div>

Salve a tutti,  
sto cercando di fare un parsing di un file di thunderbird che contiene i  
testi di alcune email.

Il problema Ã¨ che non riesco a visualizzare correttamente le lettere  
accentate, vista la differenza di codifica del file e dei caratteri  
riconosciuti da ruby (o da mac osx, non ho ancora capito… )

Ho capito (usando file nomefile) che il file che sto cercando di aprire  
Ã¨ di tipo ISO-8859 mail text,  
ma poi guardando nel pannello di thunderbird vedo che la codifica per  
tutte le mail Ã¨ iso-8859-15 (dovrebbe essere equivalente a latin-9), e  
la visualizzazione classica nella finestra di thunderbird Ã¨ corretta, ma  
quando si va a vedere il sorgente dell’email, si vedono gli stessi  
caratteri che si trovano nel file salvato sull’hard disk.

Il codice ruby che uso Ã¨ il seguente: apro il file in questione nella  
classe Mailbox e provo a convertire ogni stringa del file usando Iconv  
(ho scoperto che usa proprio l’iconv installato nel sistema) e converto  
da LATIN-9 a UTF8.

def initialize(path\_to\_filename) File.open(path\_to\_filename) do  
|file|  
puts file.inspect  
@file\_lines = file.readlines  
converter\_to\_utf = Iconv.new(“UTF8”, “LATIN-9”)

```
 @file_lines_converted = []
     @file_lines.each do |line| puts line
   # conversion
   converted_line = converter_to_utf.iconv(line)
   puts converted_line
   @file_lines_converted << converted_line
 end
   end

```

Il problema Ã¨ che non riconosce le lettere accentate, e le sostituisce  
con =E0, =E9, etc etc…

Sono un po’confuso… Grazie in anticipo dell’aiuto.

ps: vi incollo di seguito il testo cosÃ¬ come lo si legge sul file e  
anche quando lo apro con textmate.

From - Thu Jul 3 01:51:37 2008

* * *

Internazionale  
P R I M A P A G I N A  
I titoli di apertura dei giornali di tutto il mondo

Mercoled=EC 2 luglio 2008  
=3D\> Domani accadr=E0

…

PUBBLICIT=C0

Puoi leggere Internazionale direttamente sul tuo computer,  
sfogliando pagina per pagina la copia del giornale in  
formato pdf. =C8 semplice, basta abbonarsi e scaricare il  
numero.

[https://pdf.internazionale.it](https://pdf.internazionale.it)

…

AL MEETIX DI GENOVA=20

GAYATRI CHAKRAVORTY SPIVAK  
Filosofa statunitense di origine bengalese, insegna alla  
Columbia University di New York. Ha costruito la sua  
riflessione filosofica a partire dalla critica  
dell’universalismo e dell’eurocentrismo.

Esperienze di transcultura

Venerd=EC 4 luglio 2008, Palazzo Ducale, Sala del Minor  
Consiglio, ore 17.45, Genova

Info: www.palazzoducale.genova.it/naviga.asp?pagina=3D3693

ventidue. La polizia ha sparato e ucciso il guidatore, un  
palestinese gi=E0 schedato dalla polizia. Anche se nessuna  
org  
L’opposizione democratica =E8 scesa in piazza protestando  
contro presunti brogli. Durante le proteste le sedi  
dell’Mprp sono stati incendiati e saccheggiati, pi=F9 di  
cinquanta persone sono state ferite e centinaia arrestate.  
Alcune fonti parlano di cinque morti non ancora confermate  
dalle autorit=E0. =20

…

LE MONDE, Francia

> **[Le Monde - Toute l’actualité en continu](https://www.lemonde.fr)**
>
> International, Economie, Environnement … La référence, partout, tout le temps.

L’Unione africana chiede un governo di unit=E0 nazionale in  
Zimbabwe.

L’Unione africana ha chiesto allo Zimbambwe di formare un  
governo di unit=E0 nazionale. La richiesta arriva dopo la  
rielezione del  
giugno dall’Unione europea =E8, secondo il Mercosur,  
discriminatoria e viola i diritti umani e il diritto di  
libera circolazione. Il Mercosur condanna la direttiva  
europea sui migranti e dichiara che cercher=E0 di trovare un  
modo per evitarne l’applicazione.=20

…  
con l=92azienda tedesca.

---

<div class="post-metadata">

**Author:** ![matteobo77](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/c0e974/32.png) [@matteobo77](https://www.ruby-forum.com/u/matteobo77)\
**Post date:** [November 24, 2009, 12:29am UTC](https://www.ruby-forum.com/t/leggere-un-file-iso8859-15-e-convertirlo-in-utf8/179374/2 "2009-11-24T00:29:55Z")

</div>

> Il problema è che non riconosce le lettere accentate, e le sostituisce  
> con =E0, =E9, etc etc…

Ciao,  
se vuoi capire i dettagli dai una occhiata alla rfc2045 altrimenti  
String#unpack fa al caso tuo.

Per esempio:  
‘=3D\> Domani accadr=E0’.unpack(‘M’).first

ti ritorna “=\> Domani accadrà”.

## Ciao, Andrea

ZephirWorks.

---

<div class="post-metadata">

**Author:** ![matteobo77](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/c0e974/32.png) [@matteobo77](https://www.ruby-forum.com/u/matteobo77)\
**Post date:** [November 24, 2009, 10:18am UTC](https://www.ruby-forum.com/t/leggere-un-file-iso8859-15-e-convertirlo-in-utf8/179374/3 "2009-11-24T10:18:47Z")

</div>

Andrea C. Granata wrote:

> Ciao,  
> se vuoi capire i dettagli dai una occhiata alla rfc2045 altrimenti  
> String#unpack fa al caso tuo.  
> Per esempio:  
> ‘=3D\> Domani accadr=E0’.unpack(‘M’).first  
> ti ritorna “=\> Domani accadrï¿½”.

Grazie Andrea, hai colto esattamente il problema, visto che nell’header  
delle mail leggo:  
Content-type: text/plain; charset=“ISO-8859-1”  
Content-transfer-encoding: quoted-printable

non so per quale motivo, ma il risultato sul mio sistema non Ã¨ lo  
stesso:  
irb(main):001:0\> ‘=3D\> Domani accadr=E0’.unpack(‘M’).first  
=\> “=\> Domani accadr\340”

usando ruby -v: ruby 1.8.7 (2008-08-11 patchlevel 72) [i686-darwin9]

ho fatto anche diverse prove, che copio di seguito:  
irb(main):005:0\> ‘=E0’.unpack(‘M’).first  
=\> “\340”  
irb(main):006:0\> "Ã "  
=\> “\303\240”  
irb(main):014:0\> puts ‘=E0’.unpack(‘M’).first  
?  
=\> nil  
irb(main):015:0\> puts 'Ã '.unpack(‘M’).first  
Ã  
=\>nil

(forse la cosa migliore Ã¨ sostituire le occorrenze con delle espressioni  
regolari?)

---

<div class="post-metadata">

**Author:** ![matteobo77](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/c0e974/32.png) [@matteobo77](https://www.ruby-forum.com/u/matteobo77)\
**Post date:** [November 24, 2009, 10:39am UTC](https://www.ruby-forum.com/t/leggere-un-file-iso8859-15-e-convertirlo-in-utf8/179374/4 "2009-11-24T10:39:46Z")

</div>

ok, credo di aver risolto con un altro passaggio intermedio:

irb(main):042:0\> string = “=3D\> Domani accadr=E0”  
=\> “=3D\> Domani accadr=E0”  
irb(main):043:0\> unpacked\_string = string.unpack(‘M’).first  
=\> “=\> Domani accadr\340”  
irb(main):044:0\> require “iconv”  
=\> true  
irb(main):045:0\> converter\_to\_utf8 = Iconv.new(‘UTF-8’, ‘ISO-8859-1’)  
=\> #Iconv:0x1167014  
irb(main):046:0\> converter\_to\_utf8.iconv(unpacked\_string)  
=\> “=\> Domani accadr\303\240”  
irb(main):047:0\> puts converter\_to\_utf8.iconv(unpacked\_string)  
=\> Domani accadrÃ  
=\> nil
