2012-12-26 51 views
10

मैं अपने/घर फ़ोल्डर में फ़ाइलों को पढ़ने के लिए एक हास्केल स्क्रिप्ट बनाना चाहता हूं। हालांकि चीनी पात्रों के साथ कई फाइलें हैं, और हास्केल और घसी इसे प्रबंधित नहीं कर सकते हैं। ऐसा लगता है कि हास्केल और घसी यूटीएफ -8 अक्षरों को प्रदर्शित करने में अच्छे नहीं हैं।हास्केल या ghci चीनी अक्षरों को दिखाने में सक्षम कैसे करें और स्क्रिप्ट नामक चीनी वर्ण चलाएं?

यहाँ मैं क्या सामना करना पड़ा है:

Prelude> "让Haskell或者Ghci能正确显示汉字并且读取汉字命名的文档" 

"\35753Haskell\25110\32773Ghci\33021\27491\30830\26174\31034\27721\23383\24182\19988\35835\21462\27721\23383\21629\21517\30340\25991\26723" 
+7

यह वास्तव में आपके प्रश्न का उत्तर नहीं देता है, लेकिन मैं टिप्पणी करूंगा कि आपको 'putStrLn' और दोस्तों के साथ प्रोग्राम प्रिंटिंग स्ट्रिंग्स के साथ यह समस्या नहीं होगी। इसके अलावा, [यह SO सवाल] (http://stackoverflow.com/questions/5535512/how-to-hack-ghci-or-hugs-so-that-it-prints-unicode-chars-unescaped) मदद की हो सकती है आप को। – gspr

उत्तर

18
Prelude> putStrLn "\35753Haskell\25110\32773Ghci\33021\27491\30830\26174\31034\27721\23383\24182\19988\35835\21462\27721\23383\21629\21517\30340\25991\26723" 
让Haskell或者Ghci能正确显示汉字并且读取汉字命名的文档 

GHC यूनिकोड ठीक संभालती है। ये चीजें हैं जिनके बारे में आपको पता होना चाहिए:

यह आपके सिस्टम एन्कोडिंग का उपयोग बाइट से वर्णों में कनवर्ट करने और कंसोल पर पढ़ने या लिखने के लिए वापस करने के लिए करता है। चूंकि यह आपके उदाहरण में बाइट्स से वर्णों में सही ढंग से रूपांतरण करता है, इसलिए मैं कहूंगा कि आपका सिस्टम एन्कोडिंग ठीक से सेट है।

showString पर फ़ंक्शन एक सीमित आउटपुट कैरेक्टर सेट है। show फ़ंक्शन का उपयोग जीएचसीआई द्वारा अभिव्यक्ति का मूल्यांकन करने के परिणाम को मुद्रित करने के लिए किया जाता है, और print फ़ंक्शन द्वारा String प्रतिनिधित्व में दिए गए मान को परिवर्तित करने के लिए किया जाता है।

putStr और putStrLn फ़ंक्शंस वास्तव में कंसोल पर String लिखने के लिए हैं जैसा कि उन्हें प्रदान किया गया था।

+0

मैंने "hGetLine h >> = hPutStr g" की कोशिश की और लक्ष्य जी के साथ संबंधित फ़ाइल वास्तव में सही सामग्री प्राप्त करती है। लेकिन ghci सामान्य रूप से चीनी वर्ण प्रदर्शित नहीं कर सकता है। – TorosFanny

+8

@ user1926094: यह इतना नहीं है "नहीं" जैसा "नहीं"। यह * उनसे बचने के लिए * चुनता है, क्योंकि बच निकले संस्करण को आपके टर्मिनल, या आपके फ़ॉन्ट, या जो भी कुछ भी खराब नहीं किया जा सकता है। –

0

कार्ल के लिए धन्यवाद, मैं अपने fuction के चारों ओर एक आवरण के रूप में putStrLn प्रयोग किया है:

ghci> let removeNonUppercase st = [c | c <- st, c `elem` ['А'..'Я']] 
ghci> putStrLn (removeNonUppercase "Ха-ха-ха! А-ха-ха!") 
ХА 

सब कुछ ठीक काम करता है!