आउटपुट करने के लिए हास्केल का उपयोग करना मैं कंसोल में यूटीएफ -8-एन्कोडेड डेटा को आउटपुट करने की कोशिश कर रहा हूं।एक यूटीएफ -8-एन्कोडेड बाइटस्ट्रिंग
मैंने String
का उपयोग करके इसे पूरा करने में कामयाब रहा है, लेकिन अब मैं ByteString
के साथ ऐसा करना चाहता हूं। क्या ऐसा करने का एक अच्छा और तेज़ तरीका है?
यह मैं अब तक क्या मिल गया है, और यह काम नहीं कर रहा:
import Prelude hiding (putStr)
import Data.ByteString.Char8 (putStr, pack)
main :: IO()
main = putStr $ pack "čušpajž日本語"
यह uapaj~�,�
बाहर प्रिंट, ओह।
मुझे नवीनतम जीएचसी 6.12.1 सर्वोत्तम के लिए उत्तर चाहिए, हालांकि मैं पिछले संस्करणों के उत्तर भी सुनना चाहता हूं।
धन्यवाद!
अद्यतन: पाठ की एक ही यूटीएफ -8-एन्कोडेड लाइन को पढ़ना और आउटपुट करना ठीक से काम करता है। (Data.ByteString.Char8
का उपयोग करके, मैं बस putStr =<< getLine
करता हूं।) लेकिन उपरोक्त उदाहरण में, .hs फ़ाइल के अंदर से पैक किए गए मान, ठीक से आउटपुट करने से इनकार करते हैं ... मुझे कुछ गलत करना होगा?
आप किस मंच पर हैं? यूनिक्स-जैसे प्लेटफार्मों पर यूनिकोड अब काफी अच्छा काम करता है; विंडोज़ समर्थन थोड़ा सा है। System.IO के लिए प्रलेखन देखें: "(जीएचसी नोट: विंडोज़ पर, हम वर्तमान में डबल-बाइट एन्कोडिंग का समर्थन नहीं करते हैं; यदि कंसोल का कोड पेज असमर्थित है, तो लोकेल एन्कोडिंग लैटिन 1 होगी।)" – ephemient
64-बिट लिनक्स। 'System.IO' केवल 'स्ट्रिंग' के साथ काम नहीं करता है? –
आपको 'बीएस। चाहर 8' का उपयोग नहीं करना चाहिए, क्योंकि वह 8-बिट एन्कोडिंग मानता है और बहु-बाइट यूनिकोड वर्णों को छोटा करता है। सामान्य बाइटस्ट्रिंग का प्रयोग करें जबतक कि आप बिल्कुल * जानते हैं कि 'बीएस.खार 8' सही डेटा प्रकार है (जिसमें यह भी शामिल है कि सामान्य बाइटस्ट्रिंग स्पष्ट रूप से उस उपयोग के मामले के लिए सही प्रकार क्यों नहीं हैं)। – David