[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: sed e accentate...



Ciao,

Il Mer, 21 Marzo 2012 4:18 pm, Piviul ha scritto:
> bodrato@mail.dm.unipi.it scrisse in data 21/03/2012 15:50:
>> $ man iconv
>> ...
>>   --to-code, -t encoding
>>      Convert characters to encoding. If not specified the encoding
>>      corresponding to the current locale is used.

> Avevo letto anch'io il man ma alcune volte mi è capitato in alcuni
> script quello che è capitato a te. Per pigrizia non ho mai approfondito
> la cosa (essendo script lanciati da cron ho immaginato che la variabile
> d'ambiente LANG non fosse settata come mi aspettavo fosse) sicché da
> allora ho sempre usato anche il parametro -t. Tu hai provato ad usarlo?

Senza troppa convinzione, ho anche provato ad aggiungere il parametro -t,
ma ovviamente non è cambiato nulla. Dico ovviamente perché ti ricordo
che l'errore era:

$ iconv -f us-ascii <stat.csv|sed ...
iconv: sequenza di input non consentita alla posizione 2801459

ovvero lascia intendere che il problema sta nella conversione "da" e non
nella codifica "verso"...

> Se sei sicuro che iconv non converte secondo il locale corrente potresti
> aprire un bug report!

Tu, pigro, non approfondisci la cosa... mentre io devo aprire un bug
report ?!? :-P

Comunque ho approfondito, il fatto è che il file, effettivamente, non è
codificato secondo lo standard us-ascii... ed anche questo era abbastanza
ovvio, visto che contiene delle lettere accentate...
Ma queste accentate sono veramente rarissime, tanto che, come l'errore di
cui sopra dice esplicitamente, la prima si presenta dopo oltre duemilioni
e ottocentomila caratteri in puro ASCII.
Quindi l'errore è stato del comando

$ file --mime-encoding stat.csv
stat.csv: us-ascii

Però file agisce in modo euristico e non può essere biasimato per
qualche comprensibile imprecisione.

Insomma, selezionando la prima riga con un'accentata e dandola in pasto a
file ho scoperto che la codifica effettivamente era iso-8859-1, infatti

$ iconv -f iso-8859-1 <stat.csv|sed ...

funziona senza intoppi.

Mi resterebbe la curiosità di capire perché per sed, se LANG=C
l'espressione regolare ".*" include senza problemi anche un carattere
accentato in una codifica sbagliata, mentre altrimenti no...

In ogni caso, adesso ho almeno un paio di soluzioni praticabili in tasca...

Ciau!
m

-- 
http://bodrato.it/software/strassen.html


Reply to: