2015-04-28 31 views
7

Il mio sistema è SUSE Linux Enterprise Server 11.Perché iconv non può convertire da UTF-8 a ISO-8859-1

Sto cercando di convertire un dati dal formato UTF-8 a ISO useing "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 

Potresti aiutarmi con questo? Grazie.

+0

Sembra che iconv da utf-8 a iso non funzioni con alcuni caratteri Unicode specifici. Ho usato l'opzione --unicode-subst = formatstring e funziona, non la soluzione perfetta ma soddisfacente –

+0

Quale versione di iconv supporta "--unicode-subst"? – AdamC

+0

iconv --version iconv (GNU libc) 2.12 Copyright (C) 2010 Free Software Foundation, Inc. Questo è software libero; vedere la fonte per le condizioni di copia. Non c'è la garanzia ; nemmeno per COMMERCIABILITÀ o IDONEITÀ PER UN PARTICOLARE SCOPO. Scritto da Ulrich Drepper. –

risposta

13

Il file di input contiene caratteri che non esistono in latino 1. È possibile utilizzare l'opzione di saltare -c loro:

iconv -c -futf8 -tl1 test.utf8 > test.iso 
+0

Sì, questa soluzione funziona bene, ma ho bisogno di mantenere la lunghezza della linea esatta, quindi ho bisogno di mettere quei caratteri fittizi. –

0

utilizzare il parametro //TRANSLIT ei personaggi fittizi saranno messi.

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

2

a volte è meglio utilizzare sia -c e // translit, per 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