unicode - एक यूटीएफ-8-एन्कोडेड बाइटस्ट्रिंग आउटपुट करने के लिए हास्केल का उपयोग करना




मैं कंसोल में यूटीएफ -8-एन्कोडेड डेटा को आउटपुट करने की कोशिश कर रहा हूं।

मैंने String का उपयोग करके इसे पूरा करने में कामयाब रहा है, लेकिन अब मैं ByteString साथ ऐसा करना चाहता ByteString । क्या ऐसा करने का एक अच्छा और तेज़ तरीका है?

यह वही है जो मुझे अब तक मिला है, और यह काम नहीं कर रहा है:

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

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

यह uapaj~ , , uapaj~ , प्रिंट करता है।

मुझे नवीनतम जीएचसी 6.12.1 सर्वश्रेष्ठ के लिए एक जवाब चाहिए, हालांकि मैं पिछले संस्करणों के उत्तर भी सुनना चाहता हूं।

धन्यवाद!

अपडेट करें: टेक्स्ट की एक ही यूटीएफ -8-एन्कोडेड लाइन को पढ़ना और आउटपुट करना ठीक से काम करता है। ( Data.ByteString.Char8 का उपयोग Data.ByteString.Char8 , मैं बस एक putStr =<< getLine ।) लेकिन .hs फ़ाइल के अंदर से पैक किए गए मान, जैसा उपरोक्त उदाहरण में, ठीक से आउटपुट करने से इनकार करता है ... मुझे कुछ गलत करना होगा?


bytestrings बाइट्स के तार हैं। जब वे आउटपुट होते हैं, तो उन्हें 8 बिट्स तक छोटा कर दिया जाएगा, क्योंकि यह Data.ByteString.Char8Data.ByteString.Char8 लिए प्रलेखन में वर्णन करता है। हैकेज पर utf8-string पैकेज के माध्यम से आपको उन्हें utf8 में स्पष्ट रूप से रूपांतरित करने की आवश्यकता होगी, जिसमें बाइटस्टर्स के लिए समर्थन शामिल है।

हालांकि, 2011 तक, आपको तेजी से पैक किए गए यूनिकोड आउटपुट के लिए text पैकेज का उपयोग करना चाहिए। जीएचसी यूनिकोड चरित्र आउटपुट छिड़काव

आपका उदाहरण बहुत आसान हो जाता है:

{-# LANGUAGE OverloadedStrings #-}

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

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

इस तरह:

$ runhaskell A.hs
čušpajž日本語




bytestring