سؤال

سأخرج من ذهني في محاولة لإخراج بيانات UTF-8 المشفرة إلى وحدة التحكم.

لقد تمكنت من تحقيق ذلك باستخدام String, ، لكن الآن أود أن أفعل الشيء نفسه مع ByteString. هل هناك طريقة لطيفة وسريعة للقيام بذلك؟

هذا ما حصلت عليه حتى الآن ، وهو لا يعمل:

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

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

يطبع uapaj~�,�, ، قرف.

أرغب في إجابة لأحدث GHC 6.12.1 الأفضل ، على الرغم من أنني أرغب في سماع إجابات للإصدارات السابقة أيضًا.

شكرًا!

تحديث: ببساطة قراءة وإخراج نفس خط النصوص المصففة بـ UTF-8 يبدو أنه يعمل بشكل صحيح. (استخدام Data.ByteString.Char8, ، أنا فقط أفعل putStr =<< getLine.) لكن القيم المعبأة من داخل ملف .HS ، كما في المثال أعلاه ، ترفض الإخراج بشكل صحيح ... يجب أن أفعل شيئًا خاطئًا؟

هل كانت مفيدة؟

المحلول

utf8-string يدعم bytestrings.

import Prelude hiding (putStr)
import Data.ByteString.Char8 (putStr)
import Data.ByteString.UTF8 (fromString)

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

نصائح أخرى

bytestrings هي سلاسل البايتات. عندما يتم إخراجها ، سيتم اقتطاعها إلى 8 بتات ، كما يصف في الوثائق Data.ByteString.Char8. ستحتاج إلى تحويلها بشكل صريح إلى UTF8 - عبر utf8-string حزمة على Hackage ، والتي تحتوي على دعم للاشترات.


ومع ذلك ، اعتبارًا من عام 2011 ، يجب عليك استخدام text حزمة ، لإخراج Unicode سريع ، معبأة. GHC اقتطاع إخراج حرف Unicode

يصبح مثالك أكثر بساطة:

{-# 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ž日本語
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top