Question

Je vais sortir de mon esprit en essayant simplement sortie des données UTF-8 codés à la console.

J'ai réussi à y parvenir en utilisant String, mais maintenant je voudrais faire la même chose avec ByteString. Est-il un moyen agréable et rapide à faire?

est ce que j'ai jusqu'à présent, et il ne fonctionne pas:

import Prelude hiding (putStr)
import Data.ByteString.Char8 (putStr, pack)

main :: IO ()
main = putStr $ pack "čušpajž日本語"

Il imprime uapaj~�,�, pouah.

Je voudrais une réponse pour le plus récent GHC 6.12.1 mieux, bien que je voudrais entendre des réponses pour les versions précédentes, ainsi.

Merci!

Mise à jour: Il suffit de lire et sortir la même ligne de texte UTF-8 codé semble fonctionner correctement. (L'utilisation Data.ByteString.Char8, je fais juste un putStr =<< getLine.) Mais les valeurs de l'intérieur du emballé fichier .hs, comme dans l'exemple ci-dessus, refuser de sortie correctement ... Je dois faire quelque chose de mal?

Était-ce utile?

La solution

utf8-string prend en charge les chaînes d'octets.

import Prelude hiding (putStr)
import Data.ByteString.Char8 (putStr)
import Data.ByteString.UTF8 (fromString)

main :: IO ()
main = putStr $ fromString "čušpajž日本語"

Autres conseils

bytestrings sont des chaînes d'octets. Quand ils sont sortie, ils seront tronqués à 8 bits, comme décrit dans la documentation de Data.ByteString.Char8. Vous aurez besoin de les convertir explicitement en UTF8 -. Via le paquet utf8-string sur Hackage, qui contient le support pour les chaînes d'octets


Cependant, à partir de 2011, vous devez utiliser le package text, pour la sortie unicode rapide, emballé. GHC tronquer sortie de caractères Unicode

Votre exemple devient beaucoup plus simple:

{-# LANGUAGE OverloadedStrings #-}

import qualified Data.Text    as T
import qualified Data.Text.IO as T

main = T.putStrLn "čušpajž日本語"

comme ceci:

$ runhaskell A.hs
čušpajž日本語
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top