Utilisation de Haskell pour délivrer un ByteString UTF-8-encoded
-
21-09-2019 - |
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?
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ž日本語