2010-03-26 3 views
0

Si vous êtes sur Mac OS X 10.6, et vous êtes familier avec le codage des caractères et le terminal s'il vous plaît faire:problème avec iconv

Ouvrir un terminal et tapez les commandes suivantes:

écho Sørensen > test.txt iconv -f UTF8 -t ISO-8859-1 test.txt

Vous verrez la sortie: "sørensen". Quelqu'un peut-il expliquer ce qui se passe?

+0

devrait être « iconv -f utf-8 -t ISO-8859-1 test.txt " –

Répondre

0

UTF-8 est un codage multi-octets. Le caractère ø est codé sur deux octets: C3-B8. Dans l'encodage de votre terminal (ISO-8859-1), ces octets sont décodés comme ¸. Ensuite, vous convertissez ces octets en code ISO-8859-1 de ø. Des questions?

+0

Merci beaucoup pour votre réponse. J'essaie de comprendre ceci, alors s'il vous plaît nu avec moi :-) "¸" lorsqu'il est entré dans le terminal sont traités comme ISO-8859-1? S'il est converti de l'UTF-8 à l'ISO-8859-1, le terminal peut l'afficher correctement car les deux caractères sont lus comme UTF-8 et convertis en ISO-8859-1. Cela signifie-t-il que si le terminal était réglé sur UTF-8, les deux caractères seraient affichés comme "ø"? – jriff

+0

Je viens de vérifier et mon terminal est réglé sur UTF-8. – jriff

+0

Si mon terminal est réglé sur UTF-8 et que le chat ne devrait pas recevoir un "ø" et non "Ã"? – jriff

0

J'ai essayé la commande « iconv » d'un fichier à un autre, en regardant les données avec « od -txC » avec les résultats suivants:

Input: c3 83 c2 b8   [ 2 utf8-chars Capital A tilde; Cedilla ] 

Command: iconv -f utf-8 -t ISO-8859-1 <in.txt> out.txt 

Output: c3 b8 [ 2 ISO-8859-1 characters, Capital A tilde; Cedilla ] 

Ainsi, la conversion iconv est correcte. Mais, si vous traitez plutôt les données converties comme utf-8 (ce que fait apparemment Terminal), C3-B8 est "ø" (o-slash).

Si vous changez votre codage de caractères dans le terminal (Préférences // // avancée de codage de caractères) à "Ouest (ISO Latin 1)" vous verrez C3-B8 comme ""

+0

David, merci beaucoup. Si je fais echo ø> test.txt et le chat je reçois 'ø' Dans quel codage se trouve ce caractère? – jriff

+0

Impossible de dire: tout ce qui vous dit est que les encodages d'entrée et de sortie de votre terminal sont les mêmes. Si vous faites od -txC test.txt, vous pouvez voir la valeur brute (hexadécimale) qui est stockée dans le fichier, puis vous pouvez en déduire quel encodage a été utilisé. –

+0

Si je créais un fichier contenant seulement les deux octets c3 et b8 et que je l'exécutais via iconv, je devais interpréter à 100% iconv comment interpréter ces deux octets. Si j'utilisais "-f UTF8", il lirait les deux octets comme le caractère multi-octets "ø". Si j'utilisais "-f ISO-8859-1", il lirait les deux octets comme les deux caractères à un seul octet "Ã" et "¸". – jriff

Questions connexes