2010-05-29 6 views
3

J'ai reçu un programme en sortie de hachage utf-8 en utilisant le paquet utf8-string et en utilisant uniquement les fonctions de sortie de ce paquet.Sortie de la chaîne UTF-8 sur le terminal de Mac OS

Je Choisit l'encodage de chaque fichier que j'écris cette façon:

hSetEncoding myFile utf8 
{- myFile may be stdout -} 

mais lorsque je tente de sortie:

alpha = [toEnum 0x03B1] {- α -} 

au lieu de la belle lettre alpha, je suis sous Linux (ou dans un fichier sur windows), je suis les suivantes:

α 

la chose étrange est, même si je tente d'écrire la sortie sur un fichier, je ne peux pas le lire avec mvim comme un fichier utf-8. Est-il possible d'obtenir le comportement correct

+0

Je pense que vous voulez dire __toEnum__ pas __fromEnum__. –

+0

L'utilisation de 'utf8-string' en combinaison avec le codage natif GHC (définition de l'encodage du handle) semble mener à un double échappement. Je n'ai utilisé que 'utf8-string' sur des GHC plus anciens, avant qu'il ne soit possible de spécifier le codage des handles. – solidsnack

Répondre

3

Essayé cela sur GHC 6.12 tout à l'heure. La nouvelle fonction d'encodage élimine le besoin pour utf8-string dans ce cas simple.

import System.IO 

main       = do 
    out alpha stdout 

alpha      = [toEnum 0x03B1] {- α -} 

out s handle     = do 
    hSetEncoding handle utf8 
    hPutStrLn handle s 

S'il vous plaît laissez-moi savoir si cela fonctionne pour vous sur OS X. S'il vous plaît poster code complet la prochaine fois - il aurait fait beaucoup plus facile pour moi de vous aider.

+0

Effectivement, en supprimant utf8-string supprimé mon problème, je n'aurais pas deviné. Merci pour l'idée :) –

1

Il y a au moins deux choses que vous devez vous assurer:

  • Le codage du terminal doit être réglé sur UTF8:

alt text http://files.droplr.com.s3.amazonaws.com/files/35740123/15WO3z.Picture%2026.png

  • Le fichier est en effet encodé en UTF8 (ça devrait être si vous observez le bon résultat sous Linux)
+0

De quel fichier voulez-vous parler - le fichier de sortie ou le fichier source? – solidsnack

+0

Vous avez un fichier de sortie? Je pensais que la sortie était dans le Terminal ... Le fichier d'entrée doit être encodé en UTF8. Mais dans votre cas, je suppose que le problème réside dans l'encodage du terminal. –