I'm going out of my mind trying to simply output UTF-8-encoded data to the console.
I've managed to accomplish this using String
, but now I'd like to do the same with ByteString
. Is there a nice and fast way to do this?
This is what I've got so far, and it's not working:
import Prelude hiding (putStr)
import Data.ByteString.Char8 (putStr, pack)
main :: IO ()
main = putStr $ pack "čušpajž日本語"
It prints out uapaj~�,�
, ugh.
I'd like an answer for the newest GHC 6.12.1 best, although I'd like to hear answers for previous versions as well.
Thanks!
Update: Simply reading and outputting the same UTF-8-encoded line of text seems to work correctly. (Using Data.ByteString.Char8
, I just do a putStr =<< getLine
.) But packed values from inside the .hs file, as in the above example, refuse to output properly... I must be doing something wrong?
System.IO
work only withString
? – SwingeBS.Char8
, because that one assumes 8-Bit encoding and truncates multi-byte Unicode characters. Use normal ByteStrings unless you absolutely know thatBS.Char8
is the right data type (that includes knowing why normal ByteStrings are explicitly not the right type for that use case). – Malapropism