Perché iconv impossibile convertire da utf-8 a iso-8859-1

Il mio sistema è SUSE Linux Enterprise Server 11.

Sto cercando di convertire i dati in formato utf-8 a iso usando “iconv”

$>file test.utf8
test.utf8: UTF-8 Unicode text, with very long lines
$>
$>file -i test.utf8
test.utf8: text/plain charset=utf-8
$>
$>iconv -f UTF-8 -t ISO-8859-1 test.utf8 > test.iso

iconv: test.utf8:20:105: cannot convert

Mi può aiutare wit questo?
Grazie.

  • Sembra che iconv da utf-8 a iso non funziona con alcuni specifici caratteri Unicode. Ho usato l’opzione –unicode-subst=formatstring e funziona, non la soluzione perfetta, ma soddisfacente
  • Che versione di iconv supporta “–unicode-subst”?
  • iconv –versione iconv (GNU libc) 2.12 Copyright (C) 2010 Free Software Foundation, Inc. Questo è software libero; vedere la fonte per la copia di condizioni. NON vi è alcuna garanzia; non anche per la COMMERCIABILITÀ o IDONEITÀ PER UN PARTICOLARE SCOPO. Scritto da Ulrich Drepper.
InformationsquelleAutor | 2015-04-28

 

3 Replies
  1. 18

    Il file di input contiene caratteri che non esiste in latino 1. È possibile utilizzare il -c opzione per ignorare:

    iconv -c -futf8 -tl1 test.utf8 > test.iso
    
    • Sì, questa soluzione funziona anche bene, ma ho bisogno di mantenere l’esatta lunghezza della linea, quindi ho bisogno di mettere quel manichino di caratteri.
  2. 3

    A volte è meglio usare entrambi -c e //TRANSLIT, ad esempio,

    $ cat rodriguez
    Rodrı́guez
    
    $ file rodriguez
    rodriguez: UTF-8 Unicode text
    
    $ iconv  --unicode-subst="<U+%04X>" -f UTF-8 -t ISO-8859-1 rodriguez
    Rodr<U+0131><U+0301>guez
    
    $ iconv -f UTF-8 -t ISO-8859-1 rodriguez
    Rodr
    iconv: rodriguez:1:4: cannot convert
    
    $ iconv -f UTF-8 -t ISO-8859-1//TRANSLIT rodriguez
    Rodri
    iconv: rodriguez:1:5: cannot convert
    
    $ iconv -c -f UTF-8 -t ISO-8859-1 rodriguez
    Rodrguez
    
    $ iconv -c -f UTF-8 -t ISO-8859-1//TRANSLIT rodriguez
    Rodriguez
    
  3. 1

    Utilizzare //TRANSLIT parametro e il manichino di caratteri sarà messo.

    iconv -f UTF-8 -t ISO-8859-1//TRANSLIT test.utf8 > test.iso

    • Non funzionerà in Alpine Linux, perché utilizza più leggero iconv un’implementazione.

Lascia un commento