2015-04-28 14 views
7

Mój system SUSE Linux Enterprise Server 11.iconv Dlaczego nie można przekonwertować z UTF-8 do ISO-8859-1

Próbuję przekonwertować dane z formatu UTF-8 do 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 

Czy możesz mi w tym pomóc? Dzięki.

+0

Wygląda na to, że iconv od utf-8 do iso nie działa z określonymi znakami Unicode. Użyłem opcji --unicode-subst = formatstring i działa, nie jest to idealne rozwiązanie, ale satysfakcjonujące –

+0

Jaka wersja iconv obsługuje "--unicode-subst"? – AdamC

+0

iconv (GNU libc) 2.12 Copyright (C) 2010 Free Software Foundation, Inc. To jest darmowe oprogramowanie; zobacz źródło warunków kopiowania. Nie ma gwarancji na ; nawet w zakresie PRZYDATNOŚCI HANDLOWEJ lub PRZYDATNOŚCI DO OKREŚLONYCH ZASTOSOWAŃ. Napisane przez Ulricha Dreppera. –

Odpowiedz

13

Plik wejściowy zawiera znaki, które nie istnieją w języku łacińskim 1. Można użyć opcji -c je pominąć:

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

Tak, to rozwiązanie działa również dobrze, ale muszę zachować dokładną długość linii, więc muszę umieścić te fałszywe znaki. –

0

Zastosowanie //TRANSLIT parametr i fikcyjne postacie zostaną wprowadzone.

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

2

Czasem najlepiej używać zarówno -ci // translit, np

$ 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 
Powiązane problemy